3 つの質問。DFS をすぐに始めましょう (最初の質問)

質問 1:

地図を与えて、ある地点から別の地点に到達できるかどうかを尋ねます。

デモのため、(0,0) を初期点とします。

#include<bits/stdc++.h>
using namespace std;

string maze[110];
int val[110][110]={0}; 

int fx[4][2]={
   
   {0,1},{-1,0},{0,-1},{1,0}}; // 右,上,左,下  逆时针   x为y坐标,y为x坐标。(因为x代表行,y代表列) 

bool panduan(int x,int y,int n,int m)  //判断边界 
{
	return 0<=x&&x<n&&0<=y&&y<m;
}


bool dfs(int x,int y,int n,int m)
{
	if(maze[x][y]=='T')
	{
		return true;         //重点,要知道return是返回到哪里。 (dfs里一般都是返回到上一层dfs) ,下面的return一样 
	}
	
	val[x][y]=1;
	maze[x][y]='m';    //标记以走,可以不用这个,val数组足够了。(这里只是为了后面打印显示一条可到达的路径) 
	
	for(int i=0;i<4;i++)
	{
		int tx = x+fx[i][0];
		int ty = y+fx[i][1];
		
		if(panduan(tx,ty,n,m)&&maze[tx][ty]!='#'&&val[tx][ty]!=1)
		{
			if(dfs(tx,ty,n,m))
		{
			return true;
		}
		
		}
		
		
	}
	
	val[x][y]=0;        //回溯,撤销标记 
	maze[x][y]='.';     //回溯,撤销标记 
	return false;
}



int main()
{
	int n,m;
	cin>>n>>m;   //输入行列 
	
	for(int i=0;i<n;i++)
	{
		cin>>maze[i];
	}
	
	int x=0,y=0;
	if(dfs(x,y,n,m))
	{
		cout<<"true"<<endl;
		for(int i=0;i<n;i++)
	{
		cout<<maze[i];
		cout<<endl;
	}
	
	}
	else
	{
		cout<<"false";
	}
	
	
	return 0;
}

結果:

 

 

おすすめ

転載: blog.csdn.net/qq_58136559/article/details/129624981