//简单搜索题目 //思路:在读入图形时开一个flag标记,标记这个图形一刀切的符号和坐标,同时记录这些符号的数量。 //如果发现有两种不同符号,直接判错。发现没有一刀切符号,就是全部为'.'也判错 //经过这一筛选,可以保证图是由一种符号切的,但不确定切得对不对 //下一步判断:从一刀切的符号和沿线方向开始搜索,看数量是否正确,不正确判错 #include<iostream> using namespace std; char map[30][30],flag; int t,y,x,cnt,_y,_x; bool correct,ok; bool search(int y,int x,char c,int cnt) { int temp = cnt - 1;; if(c == '//') { for(int i = 1;i < cnt;++i) { if(map[y+i][x+i] == '//') --temp; else return false; } } else if(c == '-') { for(int i = 1;i < cnt;++i) { if(map[y][x+i] == '-') --temp; else return false; } } else if(c == '|') { for(int i = 1;i < cnt;++i) { if(map[y+i][x] == '|') --temp; else return false; } } else if(c == '/') { for(int i = 1;i < cnt;++i) { if(map[y+i][x-i] == '/') --temp; else return false; } } if(temp != 0) return false; else return true; } int main() { //freopen("in.txt","r",stdin); cin >> t; while(t--) { memset(map,'.',sizeof(map));//做关于有关图形的题目时,初始化地图边界相当重要! scanf("%d%d",&y,&x); correct = 1,cnt = 0,ok = 0; flag = '.'; for(int i = 1;i <= y;++i) { for(int j = 1;j <= x;++j) { cin >> map[i][j]; if(map[i][j] != '.') { ++cnt; if(flag == '.') { _y = i; _x = j;//记录坐标 flag = map[i][j]; } } if(flag != '.' && map[i][j] != flag && map[i][j] != '.') correct = 0; } } if(cnt == 0) correct = 0;//没有一刀切符号,判错 //下一步判断过程 if(correct) correct = search(_y,_x,flag,cnt); //输出答案过程 if(correct) cout << "CORRECT" << endl; else cout << "INCORRECT" << endl; } return 0; }