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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

POJ - 3322 Bloxorz I(bfs+状态设计)

發布時間:2024/4/11 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ - 3322 Bloxorz I(bfs+状态设计) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:點擊查看

題目大意:模擬Bloxorz小游戲找出最優解,簡單說一下規則,給出一個n*m的矩陣,其中,"#"代表墻,"X"代表起點,"O"代表終點,"E"代表脆弱道路,即承受不住立著的方塊,"."代表普通道路

題目分析:因為方塊總共有三種狀態:立著(占1格)、豎著(占2格)、橫著(占2格),我們可以將占兩個的兩個狀態壓縮到一格中,豎著的(上下分布)我們規定有效方格在上面,橫著的(左右分布)我們規定有效方格在左面,在轉移狀態時,立著的狀態可以直接判斷轉移,其余兩種狀態需要判斷兩個方格是否同時滿足條件才可以進行轉移,我們在儲存狀態時用的結構體包含了四個變量:x,y,flag,step,分別代表橫坐標,縱坐標,狀態,和步數,而每種情況轉移時都有4種不同的方案,所以方向函數需要寫三個,并且每次轉移時需要根據當前的狀態分類討論,細心一點認真寫一下bfs就能A了,具體的細節寫在代碼中了,上代碼:

#include<iostream> #include<string> #include<cstring> #include<cstdio> #include<algorithm> #include<climits> #include<cmath> #include<cctype> #include<stack> #include<queue> #include<list> #include<vector> #include<set> #include<map> using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=510;char maze[N][N];bool vis[N][N][3];int n,m,ans; //規定立著的狀態為0,橫著的狀態為1,豎著的狀態為2 const int b0[4][2]={0,-2,-2,0,0,1,1,0};//立著 flag=0 1,2,1,2const int b1[4][2]={1,0,-1,0,0,-1,0,2};//橫著 flag=1 1,1,0,0const int b2[4][2]={0,-1,0,1,-1,0,2,0};//豎著 flag=2 2,2,0,0struct Node {int x,y,step,flag;Node(int X,int Y,int STEP,int FLAG){x=X;y=Y;step=STEP;flag=FLAG;} };bool check(int x,int y) {if(x<0||y<0||x>=n||y>=m)return false;return true; }bool bfs() {memset(vis,false,sizeof(vis));queue<Node>q;for(int i=0;i<n;i++)//找一下起點for(int j=0;j<m;j++)if(maze[i][j]=='X'){if(check(i,j+1)&&maze[i][j+1]=='X')//如果起點是橫著兩個X{q.push(Node(i,j,0,1));vis[i][j][1]=true;}else if(check(i+1,j)&&maze[i+1][j]=='X')//如果起點是豎著兩個X{q.push(Node(i,j,0,2));vis[i][j][2]=true;}else//如果起點是立著的一個X{q.push(Node(i,j,0,0));vis[i][j][0]=true;}goto start;//用goto函數跳出兩層for循環} start:while(!q.empty()){Node cur=q.front();q.pop(); // cout<<cur.x<<' '<<cur.y<<endl;if(maze[cur.x][cur.y]=='O'&&cur.flag==0){ans=cur.step;return true;}if(cur.flag==0)//若當前狀態立著{for(int i=0;i<4;i++){int xx=cur.x+b0[i][0];int yy=cur.y+b0[i][1];if(i==0||i==2)//flag=1{if(!check(xx,yy)||!check(xx,yy+1)||vis[xx][yy][1]||maze[xx][yy]=='#'||maze[xx][yy+1]=='#')continue;vis[xx][yy][1]=true;q.push(Node(xx,yy,cur.step+1,1));}else if(i==1||i==3)//flag=2{if(!check(xx,yy)||!check(xx+1,yy)||vis[xx][yy][2]||maze[xx][yy]=='#'||maze[xx+1][yy]=='#')continue;vis[xx][yy][2]=true;q.push(Node(xx,yy,cur.step+1,2));}}}else if(cur.flag==1)//若當前狀態橫著{for(int i=0;i<4;i++){int xx=cur.x+b1[i][0];int yy=cur.y+b1[i][1];if(i==0||i==1)//flag=1{if(!check(xx,yy)||!check(xx,yy+1)||vis[xx][yy][1]||maze[xx][yy]=='#'||maze[xx][yy+1]=='#')continue;vis[xx][yy][1]=true;q.push(Node(xx,yy,cur.step+1,1));}else if(i==2||i==3)//flag=0{if(!check(xx,yy)||vis[xx][yy][0]||maze[xx][yy]=='#'||maze[xx][yy]=='E')continue;vis[xx][yy][0]=true;q.push(Node(xx,yy,cur.step+1,0));}}}else if(cur.flag==2)//若當前狀態豎著{for(int i=0;i<4;i++){int xx=cur.x+b2[i][0];int yy=cur.y+b2[i][1];if(i==0||i==1)//flag=2{if(!check(xx,yy)||!check(xx+1,yy)||vis[xx][yy][2]||maze[xx][yy]=='#'||maze[xx+1][yy]=='#')continue;vis[xx][yy][2]=true;q.push(Node(xx,yy,cur.step+1,2));}else if(i==2||i==3)//flag=0{if(!check(xx,yy)||vis[xx][yy][0]||maze[xx][yy]=='#'||maze[xx][yy]=='E')continue;vis[xx][yy][0]=true;q.push(Node(xx,yy,cur.step+1,0));}}}}return false; }int main() {while(scanf("%d%d",&n,&m)!=EOF&&n+m){for(int i=0;i<n;i++)scanf("%s",maze[i]);if(bfs())printf("%d\n",ans);elseprintf("Impossible\n");}return 0; }

?

總結

以上是生活随笔為你收集整理的POJ - 3322 Bloxorz I(bfs+状态设计)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 午夜剧场福利社 | 激情六月综合 | 玖玖在线| 欧美日韩在线成人 | 6080久久| 亚洲一区二区三区视频在线 | 国产免费av在线 | 国产一区二区久久精品 | 国产91免费在线观看 | 手机看片在线观看 | 青青草网站 | 精品国产免费看 | 成人手机在线免费视频 | xxxx亚洲 | 成人少妇影院yyyy | 国内自拍一区 | 亚洲精选一区二区三区 | 精品视频在线观看免费 | 久久全国免费视频 | 天堂网国产 | 亚洲一卡二卡在线观看 | 久久不卡av| av青草| 女人的天堂av在线 | 国产在线播放一区二区三区 | 亚洲电影一区二区 | 中文字幕一区二区三区人妻不卡 | 摸摸摸bbb毛毛毛片 午夜爽爽影院 | 丰满少妇一区二区 | 91福利在线免费观看 | 日韩精品一卡二卡 | 蜜臀av夜夜澡人人爽人人 | 九九在线观看免费高清版 | 久久综合久久综合久久 | 丁香久久婷婷 | 亚洲一区二区在线免费观看 | 久久久久国产一区二区三区潘金莲 | 欧美做爰xxxⅹ性欧美大片 | 亚洲视频精品一区 | 国产69精品久久久久久久 | 国产草草 | 精品久久久久久久久久 | 操少妇视频 | 亚洲激情视频在线播放 | 99re色| 美国爱爱视频 | 老女人乱淫 | 久久人人爽人人爽人人 | 九色婷婷| 性生活视频在线播放 | 91丨porny丨首页 | 国产午夜一区二区 | av网站大全在线观看 | 欧美一区二区公司 | 亚洲乱轮视频 | www.日日干| feel性丰满白嫩嫩hd | 日本中文字幕在线不卡 | 久久97| 亚洲国产久 | 成人性生活视频 | 人妖av在线 | 日韩 国产 一区 | 激情小说亚洲色图 | 国产男女猛烈无遮挡免费视频 | 国产精品久久久久久久久绿色 | 美女av一区二区 | 亚洲女同av| 欧美黄色激情视频 | 宅男深夜视频 | 古代黄色片| 国产又粗又猛又爽又黄又 | 丁香花高清视频完整电影 | 成人香蕉视频在线观看 | 国产69精品久久 | 人人爽人人爱 | 一区二区三区免费高清视频 | 日日噜 | 国产亚洲成av人在线观看导航 | 91蝌蚪网 | 在线精品亚洲欧美日韩国产 | 一级片高清 | 在线观看国产日韩 | 成人av片在线观看 | 日韩福利一区二区 | 国内精品久久99人妻无码 | 亚洲av色区一区二区三区 | 国产乱欲视频 | 嫦娥性艳史bd | 51吃瓜网今日 | 成人毛片18女人毛片 | 99久久久无码国产 | 激情毛片视频 | 日韩91在线| 日本爽爽 | 国产小视频91 | 国产高清在线观看视频 | 91色噜噜| 伊人久久久久久久久久久 |