欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

vijos P1051 送给圣诞夜的极光

发布时间:2024/4/14 编程问答 47 豆豆
生活随笔 收集整理的这篇文章主要介绍了 vijos P1051 送给圣诞夜的极光 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

调了好久。。。

#include <cstdio> #include <queue> using namespace std;char a[110*110]; /************************************** 000000000000 000000000000 00----####00 00###----#00 //like dis 00##--##--00 000000000000 000000000000 **************************************/ int visited[110*110]; int cnt; int of1x[] = {-1, 0, 1, 0}; int of1y[] = {0, -1, 0, 1}; int of2x[] = {0, 1, 2, 1, 0, -1, -2, -1}; int of2y[] = {2, 1, 0, -1, -2, -1, 0, 1};int main(){int m, n;scanf("%d%d", &m, &n);getchar();for(int i = 2; i < m+2; ++i){for(int j = 2; j < n+2; ++j){a[i*(n+4)+j] = getchar();}getchar();}n = n+4;queue<int> Q;for(int i = 0; i < (m+4)*n-1; ++i){if(!visited[i] && a[i] == '#'){int now = i;visited[now] = 2;cnt++;Q.push(now);do{//搜索附近 now = Q.front();Q.pop();int x = now%n;int y = now/n;if(visited[now] == 2){ //now是第二圈 for(int ii = 0; ii < 4; ++ii){int pos = (y+of1y[ii])*n + (x+of1x[ii]);if(!visited[pos] && a[pos] == '#'){visited[pos] = 1;Q.push(pos);}}}for(int ii = 0; ii < 8; ++ii){int pos = (y+of2y[ii])*n + (x+of2x[ii]);if(!visited[pos] && a[pos] == '#'){visited[pos] = 2;Q.push(pos);}}}while(!Q.empty());}}printf("%d", cnt);return 0; }

转载于:https://www.cnblogs.com/will7101/p/6506673.html

总结

以上是生活随笔为你收集整理的vijos P1051 送给圣诞夜的极光的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。