可恶!我连哪里错了都不知道!
by LanQiao1234 @ 2023-10-05 23:29:41
@[LanQiao1234](/user/1127157) 马蜂有点怪异,我给你改一下哈(请稍等)。
by 2044_space_elevator @ 2023-10-05 23:45:25
@[LanQiao1234](/user/1127157) 给你调好了,我应该是唯一一个愿意帮你手把手改代码的人了,悬个 1-2 关不过分吧(
问题很多先看代码:
```cpp
#include<iostream>
#include<vector>
#include<array>
//能走到终点的道路数量
int ans=1;
//判断是否已经在map_wall_counc()中生成完所有的墙
bool flag=false;
// ! 不开 long long 见祖宗!!!
std::vector<std::vector<long long> >dp (25, std::vector<long long> (25));
//* 尊重你的马蜂(doge)
//终点的位置
std::pair<int,int> fin_node;
//马的位置
std::pair<int,int> knight_node;
//地图
std::array<std::array<int,24>,24> map{{}};
std::array<std::pair<int,int>,9> knight_move={{
{0,0},
{-1,2},
{1,2},
{2,1},
{2,-1},
{1,-2},
{-1,-2},
{-2,1},
{-2,-1}
}
};
//初始化,用于生成地图,经测试并无问题
void init(){
// ! 循环 i,j 遍历不要写反,搞清楚是 fin_node.first 在前还是 fin_node.second 在前
for (int i = 2; i <= fin_node.first+2; i++)
for (int j = 2; j <= fin_node.second+2 ; j++)
map[i][j]=1;
for (auto i : knight_move)
map[knight_node.first+i.first][knight_node.second+i.second]=0;
map[2][2]=-1;
map[fin_node.first+2][fin_node.second+2]=-2;
}
//这个函数用于将所有死路以及卒走不到的点记为墙
void map_wall_counc(){
// ! 这个函数我干掉了
}
int main(){
std::cin>>fin_node.first>>fin_node.second>>knight_node.first>>knight_node.second;
knight_node.first += 2;
knight_node.second += 2;
init();
//判定兵是否被堵死
if(map[2][3]==0&&map[3][2]==0){
std::cout<<0;
return 0;
}
//数出所有分叉路口的数量
// ! 这里给你重构了
// !小兵如果已经被前面的马的控制点挡住不能往前走了,要直接 break 掉。
for (int i = 2; i <= fin_node.first + 2; i++) {if (map[i][2]) dp[i][2] =1; else break;};
for (int i = 2; i <= fin_node.second + 2; i++) {if (map[2][i]) dp[2][i]=1; else break;};
for (int i = 3; i <= fin_node.first + 2; i++) {
for (int j = 3; j <= fin_node.second + 2; j++) {
if (map[i][j]) {
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
}
}
}
std::cout<<dp[fin_node.first + 2][fin_node.second + 2];
}
```
我最大程度的尊重了你的源代码,现在说问题:
- 循环内外写反,见第 34 行。这个你没察觉出来可能是因为样例组里 $n=m$,这种情况循环内外写反没啥区别。
- 没开 long long,于是你就在 Case \# 3 爆了。
- **小兵如果已经被前面的马的控制点挡住不能往前走了,要直接 break 掉。**
具体见注释吧,另外题主用的是 Vscode 的话,建议安装插件 `Better Comments`,我是把我的注释标红过的了,这样看更舒服一点。
by 2044_space_elevator @ 2023-10-06 00:39:55