PKU 3561 Pseudographical recognizer

http://poj.org/problem?id=3561
画像データ的なものが文字列として与えられるので、その中にある線(縦線、横線、斜め線)が一本だけなのかを判定するというような問題。

泥臭いのは嫌です。
取り敢えずswitch caseは回避。

string in[10];
bool vis[10][10];

main(){
  int test;
  cin>>test;
  map<char,PI> dir;
  dir['/']=mp(-1,1);
  dir['\\']=mp(-1,-1);
  dir['|']=mp(1,0);
  dir['-']=mp(0,1);
  while(test--){
    int line=0;
    int n,m;
    cin>>n>>m;
    rep(i,n)cin>>in[i];
    memset(vis,0,sizeof(vis));
    rep(i,n){
      rep(j,m){
        if(vis[i][j] || in[i][j]=='.')continue;
        line++;
        int cx=i,cy=j;
        while(0<=cx && cx<n && 0<=cy && cy<m && in[cx][cy]==in[i][j]){
          vis[cx][cy]=true;
          cx+=dir[in[i][j]].F;
          cy+=dir[in[i][j]].S;
        }
        cx=i,cy=j;
        while(0<=cx && cx<n && 0<=cy && cy<m && in[cx][cy]==in[i][j]){
          vis[cx][cy]=true;
          cx-=dir[in[i][j]].F;
          cy-=dir[in[i][j]].S;
        }        
      }
    }
    if(line==1)cout<<"CORRECT"<<endl;
    else cout<<"INCORRECT"<<endl;
  }
}