60分求助
查看原帖
60分求助
400205
basachenboming楼主2022/1/20 15:54
#include<bits/stdc++.h>
using namespace std;
char a[51][51];
int b[51][51];
bool vis[51][51];
int num[51][51];
int k;
int c,d,e,f,n,m;
int check;
bool p=0; 
void dfs(int x,int y,int tot)
{
        if(x==c&&y==d)
		{
			p=1;
			cout<<"("<<e<<","<<f<<")"<<"->";
		for(int v=1;v<tot;v++)
		{
			for(int i=1;i<=n;i++)
			{
				for(int j=1;j<=m;j++)
				{
						if(num[i][j]==v)
						{
							cout<<"("<<i<<","<<j<<")";
							if(v<tot)
							{
								cout<<"->";
							}
					}
				}
			}
		}	
		cout<<"("<<c<<","<<d<<")";					
		cout<<endl;
		return; 	
		}   		
		if(x>0&&x<=n&&y-1>0&&y-1<=m&&b[x][y-1]==1&&vis[x][y-1]==0)
		{
			vis[x][y-1]=1;
			num[x][y-1]=tot+1;
			dfs(x,y-1,tot+1);
			vis[x][y-1]=0;
			num[x][y-1]=0;
		}		
		if(x-1>0&&x-1<=n&&y>0&&y<=m&&b[x-1][y]==1&&vis[x-1][y]==0)
		{
			vis[x-1][y]=1;
			num[x-1][y]=tot+1;
			dfs(x-1,y,tot+1);
			vis[x-1][y]=0;
			num[x-1][y]=0;
		}		
		
		if(x>0&&x<=n&&y+1>0&&y+1<=m&&b[x][y+1]==1&&vis[x][y+1]==0)
		{
			vis[x][y+1]=1;
			num[x][y+1]=tot+1;
			dfs(x,y+1,tot+1);
			vis[x][y+1]=0;
			num[x][y+1]=0;
		}			
		if(x+1>0&&x+1<=n&&y>0&&y<=m&&b[x+1][y]==1&&vis[x+1][y]==0)
		{
			vis[x+1][y]=1;
			num[x+1][y]=tot+1;
			dfs(x+1,y,tot+1);
			vis[x+1][y]=0;
			num[x+1][y]=0;
		}			

}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
	for(int j=1;j<=m;j++)
	{
		cin>>b[i][j];
	}
}
cin>>e>>f>>c>>d;
num[e][f]=1; 
dfs(e,f,1);
if(p==0)
{
	cout<<-1;
}
return 0;
}
2022/1/20 15:54
加载中...