问题标题: 酷町堂:5014 国际象棋

1
0
已解决
钱成
钱成
初级守护
初级守护

现在一脸茫然......,

运行后直接停止运行 = =

找一下错误,

#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分

我要回答