AC Again hdoj 1582 搜索
生活随笔
收集整理的這篇文章主要介紹了
AC Again hdoj 1582 搜索
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
AC Again
Time Limit: 1000/1000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 306????Accepted Submission(s): 84
?
Description
“AC”這個單詞大概是我們 ACMers 最希望聽到的回答了。不過如果把它寫下來,你還能認識嗎?現在給你一幅由點陣構成的圖,它代表 'A' 或 'C' 的一個字母。你的任務就是把它們識別出來。
注意:
1.筆劃可能有粗有細,但是我們保證字符在外形上是肉眼可辨別的。
2.我們保證筆劃是連貫的,即對于任意一個有筆劃的點,在它周圍八個點內有一點有筆劃,這兩點就是相連貫的。
3.'A','C'這兩個字符可能會按90,180,270這樣的角度旋轉。
?
Input
本題目包含多組測試,每兩組測試之間用一個或多個空行隔開。對于每組數據,系統將給你一個肉眼可以辨別的圖形表示一個字符'A' 或 'C'。
系統保證每個圖形的大小在 50 * 50 一下。
輸入數據只包含 ' '(空格)和'*'兩種字符,其中'*'表示該點有筆劃。
?
Output
對于每組數據,根據圖形,在一行內輸出 A 或 C。?
Sample Input
* * * ***** *???* ****** * * * ******?
Sample Output
A C 做題的關鍵在于,不知道如何來結束輸入,結束之后又不知道如何來判斷是哪個之母; 我們可以觀察一下,A字母中間是空的,而C不是,其實這就是一個差別啊,所以我們可以從這入手來解決這類問題; 用搜索的方法,來進行判斷; 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 using namespace std; 5 char s[55][55]; 6 void bfs(int x,int y) 7 { 8 if(x<=50 && y<=50 && x>=0 && y>=0 && s[x][y]=='#') 9 { 10 s[x][y]='*';//遇見#的話就開始進行深度搜索; 11 bfs(x+1,y);//同時把#變成*; 12 bfs(x-1,y);//但是A內部的沒有變成*,依然是#,所以在下面用flag進行判斷 13 bfs(x,y+1); 14 bfs(x,y-1); 15 } 16 } 17 int main() 18 { 19 int i,j,n,flag; 20 int k=0; 21 memset(s,'#',sizeof(s)); 22 while(gets(s[1]+1)) 23 { 24 if(s[1][1]=='\0') continue;//判斷結束輸入; 25 k=2; 26 while( gets(s[k]+1) && (s[k++][1] != '\0')); 27 for(i=0;i<51;i++) 28 for(j=0;j<51;j++) 29 if(s[i][j]!='*')//如果不是*則賦值成#; 30 s[i][j]='#'; 31 bfs(0,0);//開始調用 32 flag =0; 33 for(i=1;i<=50 && !flag;i++) 34 { 35 for(j=1;j<=50;j++) 36 { 37 if(s[i][j]=='#')//如果到最后,依然存在#,則s是A 38 { 39 flag =1;break; 40 } 41 } 42 } 43 if(flag)cout<<"A\n"; 44 else cout<<"C\n"; 45 memset(s,'#',sizeof(s)); 46 } 47 return 0; 48 }
?
?
轉載于:https://www.cnblogs.com/lovychen/p/3317947.html
總結
以上是生活随笔為你收集整理的AC Again hdoj 1582 搜索的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 连着三天梦到同一个人是什么意思
- 下一篇: Wordpress中显示页面当前位置