图中x表示无法移动。不可以走走过的路程,所以为x。
(个人喜欢“上→右→下→左”的顺序)
//Author:PanDaoxi #includeusing namespace std; //创建模拟地图、记录点否用过的变量 int G[105][105],vis[105][105],n; //位置变化:上右下左 int dx[5]={-1,0,1,0}, //x坐标的位置变化 dy[5]={0,1,0,-1}; //y坐标的位置变化 //标记是否有解 bool f=false; //深搜函数 void dfs(int x,int y){ //如果(x,y)存在目标,则有解 if(G[x][y]==2){ f=true; return; } //向四个方向搜索 for(int i=0;i<4;i++){ //更新坐标位置 int x2=x+dx[i],y2=y+dy[i]; //判断是否在地图中 //如果G[x2][y2]!=1,则可以搜索 //vis[x2][y2]==0,没走过,可以搜索 if(x2>=0&&x2 =0&&y2 >n; //初始化地图 for(int i=0;i >G[i][j]; } } //搜索:先处理两种简单情况,如果没有则搜索 if(G[0][0]==1){ //如果当前位置就是障碍,则无法搜索 cout<<"NO"; return 0; } else if(G[0][0]==2){ //如果当前位置就是目标,则不用搜索,直接成功 cout<<"YES"; return 0; } else{ //如果都没有出现则进行深度优先搜索 vis[0][0]=1; dfs(0,0); if(f){ cout<<"YES"<



