90pts求助
  • 板块学术版
  • 楼主I_will_AKIOI我心依旧
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/3/23 20:36
  • 上次更新2023/10/23 20:45:27
查看原帖
90pts求助
565265
I_will_AKIOI我心依旧楼主2023/3/23 20:36

传送门

#include<bits/stdc++.h>
using namespace std;
int n,m,sx,sy,fx,fy,s=1,ok;
int a[20][20],vis[20][20];
int nx[5]={0,0,-1,0,1},ny[5]={0,-1,0,1,0};//方向数组
int ansx[20],ansy[20];//答案

void print()
{
  ok=1;
  for(int i=1;i<=s-1;i++) cout<<"("<<ansx[i]<<","<<ansy[i]<<")"<<"->";
  cout<<"("<<ansx[s]<<","<<ansy[s]<<")"<<endl;
  return;
}
void dfs(int x,int y)
{
  if(x==fx&&y==fy)//到达边界输出答案
  {
  	print();
	return;
  }
  for(int i=1;i<=4;i++)
  {
  	int lx=x+nx[i],ly=y+ny[i];
  	if(lx<=n&&lx>=1&&ly<=m&&ly>=1&&vis[lx][ly]==0&&a[lx][ly]==1)//是否在界内且可以访问 
	{
	  vis[lx][ly]=1;
	  s++;
	  ansx[s]=lx;
	  ansy[s]=ly;//记录答案 
	  dfs(lx,ly);
	  s--; 
	  vis[lx][ly]=0;
	}
  }
  return;
} 
int main()
{
  cin>>n>>m;
  for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j];
  cin>>sx>>sy>>fx>>fy;
  ansx[1]=sx;
  ansy[1]=sy;//开始点置1 
  vis[sx][sy]=1;//开始点被访问过 
  dfs(sx,sy);
  if(ok==0) cout<<-1;//没有答案 
  return 0;
}
2023/3/23 20:36
加载中...