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

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

生活随笔

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

编程问答

(bfs)连连看(hdu1175)

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

題目:

“連連看”相信很多人都玩過(guò)。沒(méi)玩過(guò)也沒(méi)關(guān)系,下面我給大家介紹一下游戲規(guī)則:在一個(gè)棋盤(pán)中,放了很多的棋子。如果某兩個(gè)相同的棋子,可以通過(guò)一條線連起來(lái)(這條線不能經(jīng)過(guò)其它棋子),而且線的轉(zhuǎn)折次數(shù)不超過(guò)兩次,那么這兩個(gè)棋子就可以在棋盤(pán)上消去。不好意思,由于我以前沒(méi)有玩過(guò)連連看,咨詢了同學(xué)的意見(jiàn),連線不能從外面繞過(guò)去的,但事實(shí)上這是錯(cuò)的。現(xiàn)在已經(jīng)釀成大禍,就只能將錯(cuò)就錯(cuò)了,連線不能從外圍繞過(guò)。
玩家鼠標(biāo)先后點(diǎn)擊兩塊棋子,試圖將他們消去,然后游戲的后臺(tái)判斷這兩個(gè)方格能不能消去。現(xiàn)在你的任務(wù)就是寫(xiě)這個(gè)后臺(tái)程序。
Input
輸入數(shù)據(jù)有多組。每組數(shù)據(jù)的第一行有兩個(gè)正整數(shù)n,m(0< n<=1000,0< m<1000),分別表示棋盤(pán)的行數(shù)與列數(shù)。在接下來(lái)的n行中,每行有m個(gè)非負(fù)整數(shù)描述棋盤(pán)的方格分布。0表示這個(gè)位置沒(méi)有棋子,正整數(shù)表示棋子的類(lèi)型。接下來(lái)的一行是一個(gè)正整數(shù)q(0 < q<50),表示下面有q次詢問(wèn)。在接下來(lái)的q行里,每行有四個(gè)正整數(shù)x1,y1,x2,y2,表示詢問(wèn)第x1行y1列的棋子與第x2行y2列的棋子能不能消去。n=0,m=0時(shí),輸入結(jié)束。
注意:詢問(wèn)之間無(wú)先后關(guān)系,都是針對(duì)當(dāng)前狀態(tài)的!
Output
每一組輸入數(shù)據(jù)對(duì)應(yīng)一行輸出。如果能消去則輸出”YES”,不能則輸出”NO”。
Sample Input
3 4
1 2 3 4
0 0 0 0
4 3 2 1
4
1 1 3 4
1 1 2 4
1 1 3 3
2 1 2 4
3 4
0 1 4 3
0 2 4 1
0 0 0 0
2
1 1 2 4
1 3 2 3
0 0
Sample Output
YES
NO
NO
NO
NO
YES

分析與解答:

這個(gè)題需要考慮轉(zhuǎn)向,轉(zhuǎn)向的話就是根據(jù)到當(dāng)前數(shù)走的方向與到上個(gè)數(shù)走的方向是否相同來(lái)判斷。如果不同,轉(zhuǎn)彎的數(shù)要加一。現(xiàn)在我們有坐標(biāo),方向轉(zhuǎn)彎次數(shù)就好寫(xiě)了,其中我們認(rèn)為方向0就是向下,1向右,2向上,3向左,-1是最初的x1y1的方向,意味著從他走向下一個(gè)數(shù)是不用考慮轉(zhuǎn)彎的,只用記錄到達(dá)這個(gè)數(shù)的方向
由于他是詢問(wèn)x1y1到x2y2,我們只需判斷是否有x1y1到x2y2的路,這個(gè)題讓我刷新了對(duì)標(biāo)記數(shù)組的認(rèn)識(shí),之前的標(biāo)記數(shù)組都是經(jīng)過(guò)了就變?yōu)榱硪粋€(gè)數(shù),下次在經(jīng)過(guò)這個(gè)坐標(biāo)時(shí)如果已做過(guò)標(biāo)記就不走。但這個(gè)是用于記錄從(x1,y1)到(i,j)轉(zhuǎn)彎的最小次數(shù),如果在(i,j)這個(gè)位置的step<=v[i][j],就push到隊(duì)列里,我試了一下,如果把這個(gè)標(biāo)志數(shù)組去掉就會(huì)超時(shí),就是從起點(diǎn)到一個(gè)點(diǎn)的的路徑有多條,但是如果只是說(shuō)經(jīng)過(guò)了就不再考慮到這個(gè)點(diǎn)的其他路徑的話,這個(gè)點(diǎn)到終點(diǎn)的轉(zhuǎn)彎次數(shù)加上起點(diǎn)到這個(gè)點(diǎn)的轉(zhuǎn)彎次數(shù)會(huì)超過(guò)二,這是不滿足題意的,所以我們到這個(gè)點(diǎn)之后還需要考慮其他到這個(gè)點(diǎn)的路徑,其唯一目的就是讓從起點(diǎn)到終點(diǎn)的路徑轉(zhuǎn)彎的次數(shù)最小,這樣的話,就有極大的可能從這個(gè)路徑一直走到終點(diǎn)的過(guò)程中轉(zhuǎn)彎的次數(shù)滿足題意,所以我們標(biāo)記數(shù)組只存最小或者等于目前最小的轉(zhuǎn)彎次數(shù)的路徑
前面還有個(gè)判斷,如果step比2小,就繼續(xù)搜索,這是題目要求
還有常規(guī)判斷,走一步之后新的坐標(biāo)在范圍內(nèi),新坐標(biāo)這個(gè)位置沒(méi)有棋子,這個(gè)新坐標(biāo)就是我們要找的坐標(biāo) ,滿足這寫(xiě)條件,此時(shí)我們?cè)倏紤]是不是該push了

參考代碼:
https://blog.csdn.net/jzmzy/article/details/16862263

#include<cstdio> #include<cstring> #include<algorithm> #include<queue> #define MAXN 1005 using namespace std; int map[MAXN][MAXN],v[MAXN][MAXN]; const int dx[4] = {0,1,0,-1}; const int dy[4] = {-1,0,1,0}; int n,m,flag; struct node {int x,y;int dir;//記錄方向int step;//記錄轉(zhuǎn)彎次數(shù) }; int bfs(int x1,int y1,int x2,int y2) {memset(v,11,sizeof(v));//標(biāo)志數(shù)組 記錄某條路徑在該點(diǎn)轉(zhuǎn)向的次數(shù)queue <node> q;node s,temp;s.x = x1;s.y = y1;s.dir = -1;//-1表示朝哪個(gè)方向都可以s.step = 0;q.push(s);while(!q.empty()){temp = q.front();q.pop();if(temp.x == x2 && temp.y == y2 && temp.step <= 2)return 1;for(int i = 0; i < 4; i ++){s = temp;s.x += dx[i];s.y += dy[i];//走一步之后新的坐標(biāo)在范圍內(nèi),而且只有當(dāng)坐標(biāo)這個(gè)位置沒(méi)有棋子或者說(shuō)這個(gè)坐標(biāo)就是我們要找的坐標(biāo) if(s.x >= 1 && s.x <= n && s.y >= 1 && s.y <= m && (map[s.x][s.y] == 0 || (s.x == x2 && s.y == y2))){if(s.dir != -1)//s.dir是上上個(gè)坐標(biāo)走到上個(gè)坐標(biāo)的方向,這個(gè)坐標(biāo)要從新記錄 {if(s.dir != i)//與上個(gè)坐標(biāo)的方向相反,就說(shuō)明轉(zhuǎn)彎了 {s.dir = i;s.step ++;}}else s.dir = i;//記錄走的方向 if(s.step > 2) continue;if(s.step <= v[s.x][s.y])//保證轉(zhuǎn)彎次數(shù)最少,等號(hào)不能忘記{v[s.x][s.y] = s.step;q.push(s);}}}}return 0; } int main() {int i,j,t,x1,y1,x2,y2;while(scanf("%d%d",&n,&m),(n+m)){for(i = 1; i <= n; i ++)for(j = 1; j <= m; j ++)scanf("%d",&map[i][j]);//n行m列的圖 scanf("%d",&t);while(t--)//從、詢問(wèn) {scanf("%d%d%d%d",&x1,&y1,&x2,&y2);//坐標(biāo)相同,或者數(shù)不同,或者沒(méi)有東西 if(!map[x1][y1] || !map[x2][y2] || map[x1][y1] != map[x2][y2] || (x1 == x2 && y1 == y2) )flag = 0;else flag = bfs(x1,y1,x2,y2);if(flag) puts("YES");else puts("NO");}}return 0; }

總結(jié)

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

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

主站蜘蛛池模板: 天堂网国产 | 高清18麻豆 | 国产精品久免费的黄网站 | 怡红院一区 | 久久久久亚洲av成人网人人网站 | 久久99精品久久久水蜜桃 | 国产精品福利视频 | 青青草亚洲 | 午夜影视免费 | 午夜在线免费观看视频 | 国内精品卡一卡二卡三 | 一本加勒比hezyo黑人 | 91精品国产99久久久久久 | 国产又粗又黄又爽又硬的视频 | 上海女子图鉴 | 日日操日日干 | 图书馆的女友动漫在线观看 | 绯色av一区二区 | 日韩欧美日本 | 在线视频区| 日本在线网址 | 夜夜骑天天干 | 一级黄色片免费看 | 浪漫樱花动漫在线观看免费 | 精品一区二区久久久久久久网站 | 真实的国产乱xxxx在线 | 欧美www| 亚洲伊人久久综合 | 久久一级电影 | 国产精品视频观看 | 你懂的视频网站 | 亚洲影库 | www.国产com | 99色国产| 美女高潮流白浆视频 | 波多野结衣一区二区三区高清av | 亚洲午夜福利在线观看 | 亚洲视频免费在线 | 欧美在线一| 亚洲国产mv| 欧美第三页 | 亚洲伦理一区二区 | 高清成人 | 国产精品呻吟久久 | 亚洲成人免费影院 | 在线观看国产视频 | 国产精品一区二 | 91精品视频网 | 亚洲av成人精品一区二区三区 | av作品在线 | 欧美片网站yy | 国产精品久久午夜夜伦鲁鲁 | 欧美视频在线观看免费 | 高级毛片 | 亚洲自拍图片 | 色香av| 久久久久久久久久久网 | av先锋资源网 | 国产精品视频网站 | 亚洲精品无码一区二区 | 国产一区二区三区四区 | 午夜一级大片 | 91最新国产| 生活片毛片 | 你懂的在线免费观看 | 中文字幕 欧美 日韩 | 久久一区二区电影 | 特黄色大片 | 三级黄片毛片 | 久久精品福利视频 | 亚洲av日韩av不卡在线观看 | 99久久久无码国产精品免费 | 国产农村妇女精品一区 | 黄色成年人视频 | 欧美一级在线免费 | 国产精品99久久久久久久女警 | 日本欧美三级 | 东京久久久 | 日韩亚洲欧美精品 | 精品无码久久久久久久久成人 | 爆操少妇 | 欧美日韩综合一区二区 | 日韩三级视频在线观看 | 国产亚洲欧美在线 | 中出视频在线观看 | 免费国产视频 | 丰满女人又爽又紧又丰满 | 精品一区二区三区免费毛片爱 | 特级西西人体444www高清大胆 | 一级国产视频 | 精品九九视频 | 色爽爽爽 | 欧美在线观看视频一区 | 最新欧美日韩 | 成年在线视频 | 亚洲免费在线观看 | 久久丫丫 | 日韩av手机在线播放 | 日韩一二三区视频 |