1. 程式人生 > >洛谷——P1101 單詞方陣

洛谷——P1101 單詞方陣

spa div for col blank 突出 urn out namespace

https://www.luogu.org/problem/show?pid=1101#sub

題目描述

給一nXn的字母方陣,內可能蘊含多個“yizhong”單詞。單詞在方陣中是沿著同一方向連續擺放的。擺放可沿著8個方向的任一方向,同一單詞擺放時不再改變方向,單詞與單詞之間[color=red]可以[/color]交叉,因此有可能共用字母。輸出時,將不是單詞的字母用“*”代替,以突出顯示單詞。例如:

輸入:
    8                     輸出:
    qyizhong              *yizhong
    gydthkjy              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:
*******
*******
*******
*******
*******
*******
*******


沒什麽好說的~~~洛谷字符串有毒~
 1 #include <algorithm>
 2
#include <iostream> 3 4 using namespace std; 5 6 int n,mark[119][119]; 7 int fx[8]={0,0,1,1,1,-1,-1,-1}; 8 int fy[8]={1,-1,0,1,-1,0,1,-1}; 9 char yz[7]= {y,i,z,h,o,n,g},word[119][119]; 10 11 void print(int x,int y,int drict) 12 { 13 int cnt=0,xx=x,yy=y; 14 for
(int i=0;i<7;i++) 15 { 16 if(word[x][y]==yz[i]) cnt++; 17 else break; 18 x+=fx[drict];y+=fy[drict]; 19 } 20 if(cnt!=7) return ; 21 for(int i=0;i<7;i++) 22 { 23 mark[xx][yy]=1; 24 xx+=fx[drict];yy+=fy[drict]; 25 } 26 } 27 28 int main() 29 { 30 cin>>n; 31 for(int i=1;i<=n;i++) 32 for(int j=1;j<=n;j++) 33 cin>>word[i][j]; 34 for(int i=1;i<=n;i++) 35 for(int j=1;j<=n;j++) 36 if(word[i][j]==y) 37 for(int k=0;k<8;k++) 38 if(word[i+fx[k]][j+fy[k]]==i) print(i,j,k); 39 for(int i=1;i<=n;i++) 40 { 41 for(int j=1;j<=n;j++) 42 if(mark[i][j]) cout<<word[i][j]; 43 else cout<<*; 44 cout<<endl; 45 } 46 return 0; 47 }

洛谷——P1101 單詞方陣