日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Nightmare Ⅱ(双向BFS)

發布時間:2024/1/18 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Nightmare Ⅱ(双向BFS) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Nightmare Ⅱ

簡直就是暈,都怪我太菜了

#include <iostream> #include <cstring> #include <cstdio> #include <string> #include <cmath> #include <queue> using namespace std; const int dis[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; char str[810][810]; //標記是否有鬼 int used[2][810][810]; int g_x,g_y,m_x,m_y,n,m,step; struct node{int x,y; }start,z[2]; queue<node> q[2]; void init() {int i,j,cnt;scanf("%d%d",&n,&m);for(int i=0;i<n;i++){scanf("%s",str[i]);}cnt=0;for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(str[i][j]=='G'){g_x=i;g_y=j;}if(str[i][j]=='M'){m_x=i;m_y=j;}if(str[i][j]=='Z'){z[cnt].x=i;z[cnt].y=j;cnt++;}}} } int judge(node b) {if(b.x<0 || b.y<0 || b.x>=n || b.y>=m) return 0;if(str[b.x][b.y]=='X') return 0;//曼哈頓距離判斷問題if((abs(b.x-z[0].x)+abs(b.y-z[0].y))<=2*step) return 0;if((abs(b.x-z[1].x)+abs(b.y-z[1].y))<=2*step) return 0;return 1; } int bfs(int w) {node next,now;int sum=q[w].size();while(sum--){now=q[w].front();q[w].pop();if(judge(now)==0) continue;for(int i=0;i<4;i++){next.x=now.x+dis[i][0];next.y=now.y+dis[i][1];if(judge(next)==0) continue;if(used[w][next.x][next.y]==0){if(used[1-w][next.x][next.y]==1) return 1;used[w][next.x][next.y]=1;q[w].push(next);}}}return 0; } int solve() {while(!q[0].empty()) q[0].pop();while(!q[1].empty()) q[1].pop();start.x=m_x;start.y=m_y;q[0].push(start);start.x=g_x;start.y=g_y;q[1].push(start);memset(used,0,sizeof(used));used[0][m_x][m_y]=used[1][g_x][g_y]=1;step=0;while((!q[0].empty()) || (!q[1].empty())){step++;if(bfs(0)==1) return step;if(bfs(0)==1) return step;if(bfs(0)==1) return step;if(bfs(1)==1) return step;}return -1; } int main() {int t;scanf("%d",&t);while(t--){init();printf("%d\n",solve());}return 0; }

總結

以上是生活随笔為你收集整理的Nightmare Ⅱ(双向BFS)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。