60分求救
查看原帖
60分求救
428690
Astatinear楼主2021/6/17 19:40

dfsdfs爆搜60分

#include<iostream>
#include<cstdio>
using namespace std;
int pathx[20],pathy[20];
int n,m;
bool a[20][20];
bool bj[20][20];
bool output;
int x,y,x2,y2;
void print(int f)
{
	for(int i=1;i<f;++i)
	{
		printf("(%d,%d)->",pathx[i],pathy[i]);
	}
	printf("(%d,%d)\n",x2,y2);
	return;
}
void dfs(int deep,int x,int y)
{
	if(x>n||x<1||y>m||y<1||bj[x][y]==1||a[x][y]==0)
	{
		return;
	}
	if(x==x2&&y==y2)
	{
		print(deep);
		output=1;
		return; 
	}
	pathx[deep]=x,pathy[deep]=y;
	bj[x][y]=1;
	dfs(deep+1,x,y-1);
	dfs(deep+1,x-1,y);
	dfs(deep+1,x,y+1);
	dfs(deep+1,x+1,y);
	bj[x][y]=0;
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;++i)
	{
		for(int j=1;j<=m;++j)
		{
			cin>>a[i][j];
		}
	}
	cin>>x>>y>>x2>>y2; 
	dfs(1,x,y);
	if(output==0)
	{
		cout<<-1<<endl;
	} 
} 
2021/6/17 19:40
加载中...