#include #include #include #include #include #include /* ACM プログラミング・コンテスト 2010 国内予選 Problem B 迷図と命ず 問題は、迷路を抜ける最短経路を導き出すことである。迷路をグラフ構造に できれば、後は横型探索で答えが出力される。 */ // 2つの位置が同じ場合に1を返す。 int equals(short* n1,short* n2) { if(*(n1+0)==*(n2+0) && *(n1+1)==*(n2+1)){ return 1; } return -1; } // n1からn2へ位置をコピーする。 void copy(short* n1,short* n2) { *(n2+0) = *(n1+0); *(n2+1) = *(n1+1); } // 1つのエッジから次のルートを見つける。エッジは双方向エッジとする。 short* route(short* n,short graph[2][2]) { if(1==equals(n,graph[0])){ return graph[1]; } if(1==equals(n,graph[1])){ return graph[0]; } return NULL; } // fromからfindex番目の位置情報を抜き出し、toのtindex番目に移動する。 short* move_node(short from[][2],int findex,int fsize,short to[][2],int tindex) { copy(from[findex],to[tindex]); for(int cnt=1;cnt