题意:给定一张n*m的图,上面有4种线段,'-','|','\','/',判断图上是否有且仅有一条这样的线段。
题解:遍历每个点,如果不是空,就将它所在的直线给删掉,并且记录值加一,最后判断记录是否等于一即可。
View Code
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 char map[20][20]; 6 int r,c; 7 int dr[200][2]; 8 void dfs(int x,int y,char ch) 9 { 10 if(x>=0&&x<r&&y>=0&&y<c) 11 { 12 if(map[x][y]!=ch) 13 return; 14 map[x][y]='.'; 15 dfs(x+dr[ch][0],y+dr[ch][1],ch); 16 } 17 } 18 int main() 19 { 20 int T; 21 dr['-'][0]=0,dr['-'][1]=1; 22 dr['|'][0]=1,dr['|'][1]=0; 23 dr['\\'][0]=1,dr['\\'][1]=1; 24 dr['/'][0]=1,dr['/'][1]=-1; 25 for(scanf("%d",&T);T;T--) 26 { 27 scanf("%d%d",&r,&c); 28 for(int i=0;i<r;i++) 29 scanf("%s",map[i]); 30 int ret=0; 31 for(int i=0;i<r;i++) 32 { 33 for(int j=0;j<c;j++) 34 { 35 if(map[i][j]!='.') 36 { 37 ret++; 38 if(ret>1) 39 { 40 i=20; 41 break; 42 } 43 dfs(i,j,map[i][j]); 44 } 45 } 46 } 47 if(ret==1) 48 printf("CORRECT\n"); 49 else 50 printf("INCORRECT\n"); 51 } 52 return 0; 53 }