用了DFS但样例都没过求助
  • 板块P1238 走迷宫
  • 楼主gztony
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/1/27 20:48
  • 上次更新2023/11/5 04:17:08
查看原帖
用了DFS但样例都没过求助
349994
gztony楼主2021/1/27 20:48

代码出错之后先是去看了题解,发现最热的题解跟我很相似,但题解貌似能过(仅是盲猜),我的就不行,检查了半天都没有查出个所以然。这道题样例没过,得了40分,求大佬们检查一下本萌新的代码。

#include<bits/stdc++.h>
using namespace std;
int maze[20][20],walk[1000][2],dx[4]={0,-1,0,1},dy[4]={-1,0,1,0},l,c,d,a,b,t,n,m;
void print()
{
	int i;
	t=1;
	for(i=0;i<l;i++)
	{
		if(walk[i][0]!=walk[i-1][0]||walk[i][1]!=walk[i-1][1])
		{
			cout<<'('<<walk[i][0]<<','<<walk[i][1]<<')';
			if(i!=l-1)cout<<"->";
		}
	}
	cout<<endl;
}
void dfs(int x,int y)
{
	int i;
	if(x==c&&y==d)
	{
		walk[l][0]=x;
		walk[l++][1]=y;
		print();
		return;
	}
	for(i=0;i<4;i++)
	{
		if(maze[x+dx[i]][y+dy[i]]==1)
		{
			walk[l][0]=x;
			walk[l++][1]=y;
			maze[x][y]=-1;
			dfs(x+dx[i],y+dy[i]);
			l--;
			maze[x][y]=1;
		}
	}
}
int main()
{
	int i,j;
	cin>>n>>m;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			cin>>maze[i][j];
		}
	}
	cin>>a>>b>>c>>d;
	dfs(a,b);
	if(!t)cout<<-1;
	return 0;
}
2021/1/27 20:48
加载中...