这题这样过不去为什么
查看原帖
这题这样过不去为什么
1118614
I_Love_DS楼主2024/4/7 13:24
#include <bits/stdc++.h>
using namespace std;
char a[205][205];
int s[205][205];
int n,h,w;
bool flag = false,vis[205][205];
int dx[4] = {1,-1,0,0},dy[4] = {0,0,1,-1};
inline void dfs(int x,int y,int e){
	if (flag) return;
	if (a[x][y] == 'T') {
		flag = true;
		return;
	}
	for (int i = 0; i < 4; i++) {
		int sx = x + dx[i],sy = y + dy[i];
		if (sx >= 1 && sx <= h && sy >= 1 && sy <= w
		 && a[sx][sy] != '#' && !vis[sx][sy] && !(e == 0 && s[x][y] == 0)) {
			vis[sx][sy] = true;
			if (s[x][y] != 0) dfs(sx,sy,max(s[x][y],e) - 1);
			else dfs(sx,sy,e - 1);
			vis[sx][sy] = false;
		}
	}
	return;
}
int main(){
	scanf("%d%d",&h,&w);
	for (int i = 1; i <= h; i++) scanf("%s",a[i] + 1);
	scanf("%d",&n);
	for (int i = 1; i <= n; i++) {
		int x,y,e;
		scanf("%d%d%d",&x,&y,&e);
		s[x][y] = e;
	}
	for (int i = 1; i <= h; i++) 
		for (int j = 1; j <= w; j++) 
			if (a[i][j] == 'S') {
				vis[i][j] = true;
				dfs(i,j,0);
				break;
			}
	if (flag) printf("Yes");
	else printf("No");
	return 0;
}

就过不去,救救我吧

2024/4/7 13:24
加载中...