横排纵排找单词
先标记,再记录答案
最后排序,排序时一定要对准首末位置
1 #include <iostream> 2 #include <cstring> 3 #include <algorithm> 4 #include <iomanip> 5 using namespace std; 6 struct T{ 7 int num; 8 char ans[15]; 9 }down[300],acr[300]; 10 int r,c,cnt1,cnt2,cnt,tmp,k; 11 char s[15][15]; 12 int fl[15][15]; 13 bool flag; 14 bool cmp(T a,T b) 15 { 16 return a.num<b.num; 17 } 18 void mark() 19 { 20 memset(fl,0,sizeof(fl)); 21 for(int i=0;i<r;i++) if(s[i][0]!='*') fl[i][0]=1; 22 for(int i=0;i<r;i++) 23 for(int j=1;j<c;j++) 24 if(s[i][j-1]=='*'&&s[i][j]!='*') fl[i][j]=1; 25 for(int i=0;i<c;i++) if(s[0][i]!='*') fl[0][i]=1; 26 for(int i=1;i<r;i++) 27 for(int j=0;j<c;j++) 28 if(s[i-1][j]=='*'&&s[i][j]!='*') fl[i][j]=1; 29 cnt=1; 30 for(int i=0;i<r;i++) 31 for(int j=0;j<c;j++) 32 if(fl[i][j]) fl[i][j]=cnt++; 33 } 34 void fuc() 35 { 36 cnt1=cnt2=0; flag=0; 37 for(int i=0;i<r;i++) 38 { 39 for(int j=0;j<c;j++) 40 { 41 if(( j==0 || s[i][j-1]=='*')&&s[i][j]!='*') 42 { 43 acr[++cnt1].num=fl[i][j]; 44 tmp=0,flag=1; 45 } 46 if(s[i][j]=='*') flag=0,acr[cnt1].ans[tmp]='