问题 1682: 算法3-3:迷宫(DFS找路径)(蓝桥)

http://www.dotcpp.com/oj/problem1682.html

#include<bits/stdc++.h>
using namespace std;
int vis[12][12];
char mp[12][12];
int dir[4][2]={0,1,1,0,0,-1,-1,0};
int sx,sy,ex,ey;

bool check(int x ,int y)
{
	if(x>=10 ||x<0 || y<0 || y>=10|| vis[x][y] || mp[x][y] == '#')
	return false;
	return true;
}

bool dfs(int x ,int y)
{
	if(mp[x][y] == 'E') return true;
	vis[x][y]=1;
	mp[x][y]= '*';
	for(int i=0;i<4;++i)
	{
		int nx = x+dir[i][0];
		int ny = y+dir[i][1];
		
//		mp[x][y] = '!';
		if(check(nx,ny))
		{			
			if(dfs(nx,ny))
			{				
				return true;
			}
			//else if(vis[nx][ny])  mp[nx][ny]= '!';
		}
	}
	mp[x][y]='!';
	vis[x][y]=0;
	return false;
}

int main()
{

	memset(vis,0,sizeof(vis));
	for(int i=0;i<10;++i)
	{
		for(int j=0;j<10;++j)
		{
			scanf("%c",&mp[i][j]);//注意 不能用cin>> mp[i],scanf("%s")   不能识别空格!
			if(mp[i][j] == 'S')
			{
				sx=i;
				sy=j;
			}
			if(mp[i][j] == 'E')
			{
				ex=i;
				ey=j;
			}
		}
		getchar();//吃掉 回车键 
	}
	
	//vis[sx][sy]  = 1;
	if(dfs(sx,sy))
	{
		mp[ex][ey]='*';
	
	for(int i=0;i<10;++i)
	{
		for(int j=0;j<10;++j)
		{
			printf("%c",mp[i][j]); 
		}
		printf("\n");
	}
	 
	}
		
	return 0;
 } 

猜你喜欢

转载自blog.csdn.net/intmain_S/article/details/89218733