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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

hdu 2612(bfs)Find a way

發(fā)布時(shí)間:2025/3/13 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu 2612(bfs)Find a way 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題意:就是Y和M在@相遇的最短的時(shí)間。

思路:基本的廣搜題,先Y搜一次,然后M搜一次,最后求出Y和M在@相遇的最短的時(shí)間。

代碼實(shí)現(xiàn):

#include<iostream> #include<queue> #include<cstring> using namespace std; int n,m,count1[210][210],count2[210][210],visited[210][210];//count1記錄的是Y到各個(gè)點(diǎn)的最短的時(shí)間 int b[4][2]={{1,0},{-1,0},{0,1},{0,-1}};//count2記錄的是M到各個(gè)點(diǎn)最短的時(shí)間 char str[210][210]; struct node{int x;int y; }; int nima(int x,int y) {if(x>=0&&x<n&&y>=0&&y<m&&str[x][y]!='#'&&visited[x][y]==0)return 1;elsereturn 0; } void bfs(int flag,int x,int y) {int f=0,r=0,t1,t2;node p,temp;queue<node>q;p.x=x;p.y=y;q.push(p);if(flag==1){while(!q.empty())//基本的廣搜,此時(shí)我用的是隊(duì)列,此前我用的一直是數(shù)組,還是隊(duì)列好多了 {p=q.front();q.pop();for(int i=0;i<4;i++){t1=p.x+b[i][0];t2=p.y+b[i][1];if(nima(t1,t2)){visited[t1][t2]=-1;temp.x=t1;temp.y=t2;q.push(temp);count1[t1][t2]=count1[p.x][p.y]+11;}}}}else{while(!q.empty()){p=q.front();q.pop();for(int i=0;i<4;i++){t1=p.x+b[i][0];t2=p.y+b[i][1];if(nima(t1,t2)){visited[t1][t2]=-1;temp.x=t1;temp.y=t2;q.push(temp);count2[t1][t2]=count2[p.x][p.y]+11;}}}} } int main() {int i,j,x1,y1,x2,y2,a[40005][2],num,flag,min;while(scanf("%d%d",&n,&m)!=EOF){getchar();num=0;min=100000000;for(i=0;i<n;i++)scanf("%s",str[i]);for(i=0;i<n;i++){for(j=0;j<m;j++){count1[i][j]=0;count2[i][j]=0;visited[i][j]=0;if(str[i][j]=='Y'){x1=i;y1=j;}else if(str[i][j]=='M'){x2=i;y2=j;}else if(str[i][j]=='@'){a[num][0]=i;a[num][1]=j;num++;}}}flag=1;visited[x1][y1]=-1;bfs(flag,x1,y1);memset(visited,0,sizeof(visited));flag=2;visited[x2][y2]=-1;bfs(flag,x2,y2);for(i=0;i<num;i++){if(count1[a[i][0]][a[i][1]]!=0&&count2[a[i][0]][a[i][1]]!=0)//@必須是Y和M都能到達(dá)的,否則容易出錯(cuò)的哦 {if(min>(count1[a[i][0]][a[i][1]]+count2[a[i][0]][a[i][1]]))min=count1[a[i][0]][a[i][1]]+count2[a[i][0]][a[i][1]];}}printf("%d\n",min);}return 0; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/jiangjing/archive/2013/03/07/2947835.html

總結(jié)

以上是生活随笔為你收集整理的hdu 2612(bfs)Find a way的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。