1
已解决
钱成
初级守护
初级守护
现在一脸茫然......,
运行后直接停止运行 = =
找一下错误,
#include <iostream>
using namespace std;
int dir[8][2]={{-1,0},{1,0},{0,-1},{0,1},{-1,-1},{-1,1},{1,-1},{1,1}},a[10][10] ;
int sx,sy,ex,ey,cnt,ans[100][2];
void print(int k){
for(int i=1;i<k;i++)
cout<<"("<<ans[i][0]<<","<<ans[i][1]<<")"<<"->";
cout<<"("<<ans[k][0]<<","<<ans[k][1]<<")"<<endl;
}
void dfs(int x,int y,int k) {
ans[k][0]=x,ans[k][1]=y;
if(x==ex&&y==ey){
cnt++;
if(cnt<=5) print(k);
return ;
}
for(int i=0;i<8;i++){
int nx=x+dir[i][0],ny=y+dir[i][1];
if(nx>=1&&ny>=1&&nx<=8&&ny<=8&&a[nx][ny]!=1){
dfs(nx,ny,k+1);
}
}
}
int main(){
cin>>sx>>sy>>ex>>ey;
for(int i=1;i<=8;i++)
for(int j=1;j<=8;j++)
cin>>a[i][j];
dfs(sx,sy,1);
cout<<cnt;
return 0;
}
钱成在2021-07-06 17:10:05追加了内容
等下,我的方向数组定义错了
“国王移动的方向是从正上方开始,顺时针转动,不足5种方案则有多少种打印多少种”
钱成在2021-07-06 17:24:39追加了内容
ac了,感谢
1
已采纳
王梓澳
中级光能
中级光能
这位童鞋(这个不能复制好烦)
我自己打了一遍你的代码,发现了错误
这一题是经典的走迷宫问题
以后遇到这种不输出的问题可以一个个调试
我是没有停止运行,我只是有cout没有输出值,可能哪里不一样
我调试在
在第10行后面加上cout<<x<<" "<<y<<endl;
你就会发现它一直在(6,8)(7,8)(样例)之间徘徊,不知最后是怎么停下来的
然后这个代码用的是搜索回溯,搜索了要记得回溯啊童鞋
Where is your 回溯?
加上后这个问题就解决了(这里我的a是bool)
但是这题你仍然不对。。。
答案都是正确的,但是顺序不对,这样就很好调整了吧,自己看看吧!
王梓澳在2021-07-06 17:31:37追加了内容
然后前面4个推出来了,后面自己排一下,考试一般不会这样的
王梓澳在2021-07-06 17:44:08追加了内容
刚刚瞎了。。。
王梓澳在2021-07-06 17:44:45追加了内容
应该没问题
但是我提交只有30分