H题的测试点不能全过,这样做有什么问题?

#include<bits/stdc++.h>
using namespace std;
char a[1100][1100];
int vis[1100][1100];
int n, m;
int dirt[8][2] = {{-1, -1}, {-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1},{0,-1},};
int main() {
	cin >> n >> m;
	int dx, dy;
	for(int i = 1; i <= n; i ++) {
		for(int j = 1; j <= m; j ++) {
			cin >> a[i][j];
			if(a[i][j] == 'M') vis[i][j] = 1;
			else if(a[i][j] == 'H') {
				vis[i][j] = 1;
				for(int k = 0; k <8; k++) {
					dx = i+dirt[k][0];
					dy = j+dirt[k][1];
					if(dx >=1 && dx <= n && dy >=1 && dy <=m)
					vis[dx][dy] = 1;
				}
			}
		}
	}
	for(int i = 1; i <= n; i ++) {
		for(int j = 1; j <=m; j ++) {
			if(vis[i][j] != 1) {
			 if(a[i][j] == 'L') {					
				int flag = 0;
					for(int  k = 0; k < 8; k ++) {
							dx = i+dirt[k][0];
							dy = j+dirt[k][1];
						if( dx < 1 || dx > n || dy <1 || dy >m || a[dx][dy] != 'L') {							
								flag = 1;
								break;	
							}
						}																									
						if(flag == 0) {
							vis[i][j] = 2;
						}
						for(int k = 0; k < 8; k ++) {
							dx = i+dirt[k][0];
							dy = j+dirt[k][1];
							if(dx >=1 && dx <= n && dy >=1 && dy <=m &&a[dx][dy] == 'G' && vis[dx][dy] == 0)
							vis[dx][dy] = 3;																				
						}
					}
				}
			}
		}
for(int i = 1; i <= n; i ++) {
	for(int j = 1; j <=m; j ++) {
		
		if(vis[i][j] == 2 && a[i][j] == 'L') {
			a[i][j] = 'S';
		}
		if(vis[i][j] == 3 && a[i][j] == 'G') {
			a[i][j] = 'N';
		}
		if(vis[i][j] == 0 && a[i][j] == 'G') {			
			a[i][j] = 'B';
		}
	}
}
for(int i = 1; i <= n; i ++) {
	for(int j = 1; j <= m; j++) {
		printf("%c",a[i][j]);
		if(j == m)printf("\n");
	}
}
	return 0;
}

全部评论
这个比赛的题
点赞 回复
分享
发布于 04-11 12:43 江西

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务