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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

bzoj3299 [USACO2011 Open]Corn Maze玉米迷宫

發布時間:2025/3/13 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bzoj3299 [USACO2011 Open]Corn Maze玉米迷宫 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

Description

今年秋天,約翰帶著奶牛們去玩玉米迷宮。迷宮可分成NxM個格子,有些格子種了玉 米,種宥玉米的格子無法通行。?
迷宮的四條邊界上都是種了玉米的格子,其屮只有一個格子 沒種,那就是出口。?
在這個迷宮里,有一些神奇的傳送點6每個傳送點由一對點組成,一旦 走入傳送點的某個結點,?
機器就會強制把你送到傳送點的另一頭去。所有的傳送點都是雙向 的,如果你定到了另一頭,機器也會把你送回來。?

奶牛在一個單位的時間內只能向相鄰的四個方向移動一格,不過傳送機傳送是瞬間完成 的。?
現在W西在迷宮里迷路了,她只知道目前的位罝在哪里,請你幫助她用最短的時間走出 迷宮吧。

Input

第一行:兩個用空格分開的整數:N和M,2?
第二行到N+1行:第i+1行有M個連續的字符,描述了迷宮第i行的信息。其中"#"代 表不能通行的玉米地,?
"."代表可以通行的草地,"@"代表貝西的起始位罝,"="代表迷宮出口,?
大寫字母“A”到“Z”總是成對出現的,代表一對傳送點?

Output

?

第一行:一個整數,表示貝西走出迷宮的最短時間,保證逃離迷宮的路線一定存在

Sample Input


5 6
###=##
#.W.##
#.####
#.@W##
######

Sample Output

3

HINT

?

從起點向右走,通過w傳送,再從另一端 走出迷宮

?

現在連sb廣搜都會錯……

要tp之后再判斷不合法情況

#include<cstdio> #include<cstring> #define N 510 const int mx[4]={0,1,0,-1}; const int my[4]={1,0,-1,0}; struct go{int x1,x2,y1,y2;}going[30]; int n,m; int x1,y1,x2,y2,t,w=1; int mrk[N][N]; bool sent[N][N]; int gox[N][N],goy[N][N]; int qx[N*N]; int qy[N*N]; int dist[N][N]; inline void bfs() {memset(dist,-1,sizeof(dist));qx[1]=x1;qy[1]=y1;mrk[x1][y1]=1;dist[x1][y1]=0;while (t<w){int nx=qx[++t];int ny=qy[t];if (nx==x2&ny==y2)return;for (int k=0;k<4;k++){int wx=nx+mx[k];int wy=ny+my[k];if (sent[wx][wy]){int savx=wx,savy=wy;wx=gox[savx][savy];wy=goy[savx][savy];}if (wx<1||wx>n||wy<1||wy>m||mrk[wx][wy])continue;mrk[wx][wy]=1;dist[wx][wy]=dist[nx][ny]+1;qx[++w]=wx;qy[w]=wy;}} } int main() {scanf("%d%d",&n,&m);for (int i=1;i<=n;i++)for (int j=1;j<=m;j++){char ch=getchar();while (ch!='#'&&ch!='='&&ch!='.'&&ch!='@'&&(ch<'A'||ch>'Z'))ch=getchar();if (ch=='@'){x1=i;y1=j;}elseif (ch=='#')mrk[i][j]=1;elseif (ch=='='){x2=i;y2=j;}elseif (ch>='A'&&ch<='Z'){int rnk=ch-'A'+1;sent[i][j]=1;if (!going[rnk].x1){going[rnk].x1=i;going[rnk].y1=j;}else{going[rnk].x2=i;going[rnk].y2=j;}}}for(int i=1;i<=26;i++)if (going[i].x1){int X1=going[i].x1;int Y1=going[i].y1;int X2=going[i].x2;int Y2=going[i].y2;gox[X1][Y1]=X2;goy[X1][Y1]=Y2;gox[X2][Y2]=X1;goy[X2][Y2]=Y1;}bfs();printf("%d",dist[x2][y2]); }

  

轉載于:https://www.cnblogs.com/zhber/p/4035906.html

總結

以上是生活随笔為你收集整理的bzoj3299 [USACO2011 Open]Corn Maze玉米迷宫的全部內容,希望文章能夠幫你解決所遇到的問題。

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