入門-BFS解法

來源:互聯網
上載者:User

標籤:bsp   結束   沒有   重複   cin   pen   表示   span   bfs   

題3   入門

【問題描述】

不是任何人都可以進入桃花島的,黃藥師最討厭象郭靖一樣獃頭獃腦的人。所以,他在桃花島的唯一入口處修了一條小路,這條小路全部用正方形瓷磚鋪設而成。有的瓷磚可以踩,我們認為是安全的,而有的瓷磚一踩上去就會有噴出要命的毒氣,那你就死翹翹了,我們認為是不安全的。你只能從一塊安全的瓷磚上走到與他相鄰的四塊瓷磚中的任何一個上,但它也必須是安全的才行。

由於你是黃蓉的朋友,她事先告訴你哪些磚是安全的、哪些磚是不安全的,並且她會指引你飛到第1塊磚上(第1塊磚可能在任意安全位元置),現在她告訴你進入桃花島的秘密就是:如果你能走過最多的瓷磚並且沒有死,那麼桃花島的大門就會自動開啟了,你就可以從當前位置直接飛進大門了。

注意:瓷磚可以重複走過,但不能重複計數。

【輸入格式】

第1行兩個正整數W和H,分別表示小路的寬度W和長度H,W和H都不大於20。

以下H行為一個H*W的字元矩陣。每一個字元代表一塊瓷磚。其中,“.”代表安全的磚,“#”代表不安全的磚,“@”代表第1塊磚。

【輸出格式】

輸出一行,只包括一個數,即你從第1塊磚開始所能安全走過的最多的磚塊個數(包括第1塊磚)。

【範例輸入】

11 9

.#.........

.#.#######.

.#.#.....#.

.#.#.###.#.

.#.#[email protected]#.#.

.#.#####.#.

.#.......#.

.#########.

...........

【範例輸出】

59

 

最近在準備複賽,做到了這道題,一開始沒有注意可以重複走然後WA了

這題用了隊列的思想,開始的點先入隊列,然後四個方向尋找是否符合條件,如果符合條件就入隊列,然後原始的點出隊列,直到隊列為空白結束

 

代碼:

 1 #include <bits/stdc++.h> 2 using namespace std; 3 int w,h,head=0,tail=1,sx,sy,d[4][2]={{-1,0},{0,-1},{0,1},{1,0}},dx,dy,maxx=0; 4 char g[21][21]; 5 bool used[21][21]; 6 struct Node 7 { 8     int x; 9     int y;10 }q[1001];11 void bfs(int a,int b)12 {13     q[tail].x=a;14     q[tail].y=b;15     while(head<tail)16     {17         head++;18         for(int i=0;i<4;i++)19         {20             dx=q[head].x+d[i][0];21             dy=q[head].y+d[i][1];22             if(used[dx][dy]==0&&dx>0&&dy>0&&dx<=h&&dy<=w)23             {24                 tail++;25                 q[tail].x=dx;26                 q[tail].y=dy;27                 used[dx][dy]=1;28             }29         }30     }31     return ;32 }33 int main()34 {35     //freopen("door.in","r",stdin);36     //freopen("door.out","w",stdout);37     cin>>w>>h;38     for(int i=1;i<=h;i++)39     {40         for(int j=1;j<=w;j++)41         {42             cin>>g[i][j];43             if(g[i][j]==‘#‘)44             {45                 used[i][j]=1;46             }47             else if(g[i][j]==‘.‘)48             {49                 used[i][j]=0;50             }51             else52             {53                 used[i][j]=0;54                 sx=i;55                 sy=j;56             }57         }58     }59     bfs(sx,sy);60     cout<<tail-1<<endl;61     return 0;62 }
View Code

 

入門-BFS解法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.