单词方阵(洛谷-P1101)
生活随笔
收集整理的這篇文章主要介紹了
单词方阵(洛谷-P1101)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
給一nXn的字母方陣,內可能蘊含多個“yizhong”單詞。單詞在方陣中是沿著同一方向連續擺放的。擺放可沿著8個方向的任一方向,同一單詞擺放時不再改變方向,單詞與單詞之間可以交叉,因此有可能共用字母。輸出時,將不是單詞的字母用“*”代替,以突出顯示單詞。例如:
輸入:8 輸出:qyizhong *yizhonggydthkjy gy******nwidghji n*i*****orbzsfgz o**z****hhgrhwth h***h***zzzzzozo z****o**iwdfrgng i*****n*yyyygggg y******g輸入輸出格式
輸入格式:
第一行輸入一個數n。(7<=n<=100)。
第二行開始輸入nXn的字母矩陣。
輸出格式:
突出顯示單詞的nXn矩陣。
輸入輸出樣例
輸入樣例#1:
7
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
輸出樣例#1:
*******
*******
*******
*******
*******
*******
*******
源代碼
#include<iostream> using namespace std;char str[101][101]; char judge[101][101]={0}; int direction_x[8]={-1,-1,-1,0,0,1,1,1},direction_y[8]={-1,0,1,-1,1,-1,0,1};//記錄方向 void dfs(int x,int y,int direction);int main() {int n;int i,j,k;int flag;cin>>n;//輸入矩陣大小nfor(i=0;i<n;i++)//輸入字母矩陣for(j=0;j<n;j++)cin>>str[i][j];for(i=0;i<n;i++)//尋找yizhongfor(j=0;j<n;j++)if(str[i][j]=='y')//判斷是否有yfor(k=0;k<8;k++)//如果有y,在周圍尋找是否有iif( str[i+direction_x[k]][j+direction_y[k]] == 'i')//如果周圍方向有i{flag=k;//記錄有i的方向dfs(i,j,flag);//調用函數向方向k搜索}for(i=0;i<n;i++)//如果坐標標記點為1,則輸出該坐標的字母,否則輸出*{for(j=0;j<n;j++)if(judge[i][j]==1) cout<<str[i][j];else cout<<"*";cout<<endl; }return 0; }void dfs(int x,int y,int direction) {char ch[7]={'y','i','z','h','o','n','g'};int sum=0;int i;int x1,y1;x1=x,y1=y;for(i=0;i<7;i++)//從當前左邊開始向direction方向尋找yizhong{if(str[x1][y1]==ch[i])//判斷是否有要找的字sum++;//如果有,計數器+1else//如果沒有break;//終止循環x1+=direction_x[direction];//改變坐標x,以移動到下一點y1+=direction_y[direction];//改變坐標y,以移動到下一點}if(sum==7)//如果sum=7,說明找到了yizhong{for(i=0;i<7;i++){judge[x][y]=1;//將yizhong的坐標標記為1x+=direction_x[direction];//改變坐標x,以移動到下一點y+=direction_y[direction];//改變左邊y,以移動到下一點}} }?
總結
以上是生活随笔為你收集整理的单词方阵(洛谷-P1101)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 暑期训练日志----2018.8.21
- 下一篇: Pell数列(信息学奥赛一本通-T118