求调dfs
  • 板块灌水区
  • 楼主liou_zhen_4_xie_
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/10/24 15:08
  • 上次更新2024/10/24 17:16:35
查看原帖
求调dfs
756672
liou_zhen_4_xie_楼主2024/10/24 15:08
#include <bits/stdc++.h>
using namespace std;
int dx[]={0,1,-0,-1};
int dy[]={1,0,-1,-1};
char mp[505][505];
bool vis[505][505];
int ex,ey;
int ans=-1;
int n,m;
void dfs(int nx,int ny,int step){
	vis[nx][ny]=1;
	if(nx==ex&&ny==ey){
		ans=min(ans,step);
		return ;
	}
	for(int i=0;i<4;i++){
		
		int px=nx+dx[i];
		int py=ny+dy[i];
		if(vis[px][py]) continue;
		if(mp[px][py]=='#') continue;
		if(px<0||px>=n||py<0||py>=m) continue;
		
		dfs(px,py,step+1);
	}
} 
int main(){
	cin>>n>>m;
	int x=0,y=0;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			cin>>mp[i][j];
			if(mp[i][j]=='S'){
				x=i;
				y=j;
			}
			if(mp[i][j]=='T'){
				ex=i;
				ey=j;
			}
		}
	}
	dfs(x,y,0);
	cout<<ans;
	return 0;
}

数据 3 3

S..

##.

.T.

输出-1 应为 5

玄2管

2024/10/24 15:08
加载中...