Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
TLE[BFS]#include <iostream> #include <queue> using namespace std; struct x { int i,j; int value; }; int c,d; int dir[8][2]={{-1,-2},{1,-2},{-1,2},{1,2},{-2,-1},{-2,1},{2,-1},{2,1}}; bool used[9][9]; bool success(struct x cur) { if (cur.i==c&&cur.j==d) return true; return false; } bool legal(struct x next) { if (next.i<=8&&next.i>=1&&next.j<=8&&next.j>=1) return true; return false; } int main() { struct x tmp,next; char cmd1[15],cmd2[15],s[59]; while (scanf("%s%s",cmd1,cmd2)!=EOF) { memset(used,false,sizeof(used)); c=cmd2[0]-'a'+1; d=cmd2[1]-'0'; tmp.i=cmd1[0]-'a'+1; tmp.j=cmd1[1]-'0'; tmp.value=0; queue<struct x>Q; Q.push(tmp); while (! Q.empty()) { tmp=Q.front(); Q.pop(); if (success(tmp)) break; used[tmp.i][tmp.j]=true; for (int i=0;i<8;i++) { next.i=tmp.i+dir[i][0]; next.j=tmp.j+dir[i][1]; if (legal(next)&&!used[next.i][next.j]) { next.value=tmp.value+1; Q.push(next); } } } printf ("To get from %s to %s takes %d knight moves.\n",cmd1,cmd2,tmp.value); } return 0; } 不知道为什么超时了....是出现了死循环 还是那句while (scanf("%s%s",cmd1,cmd2)!=EOF)有问题.... 多谢 Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator