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 |
麻烦牛人纠错!!用队列枚举,我的代码: #include<stdio.h> #include<memory.h> #include<string.h> #define MAX 1000000 int visit[65537]; typedef struct Node{ int st; int step; int x,y; int pre; }Node; Node arr[MAX]; int head,tail; int bfs(int temp){ int stat; int i,j,k; head=0; tail=1; arr[tail].st=temp; arr[tail].step=0; arr[tail].x=arr[tail].y=0; arr[tail].pre=-1; visit[temp]=1; while(head!=tail){ head++; for(i=0;i<4;i++) for(j=0;j<4;j++){ stat=arr[head].st; for(k=0;k<4;k++) stat^=1 << (15 - 4 * i - k); for(k=0;k<4;k++) if(k!=i){ stat^=1 << (15 - 4 * k - j); } if(!visit[stat]){ arr[++tail].st=stat; arr[tail].step=arr[head].step+1; arr[tail].x=i+1; arr[tail].y=j+1; arr[tail].pre=head; visit[stat]=1; } if(stat==0) return tail; } } return -1; }; int main() { int temp; int route[16]; char str[4]; int i,j; int index; int k; //int flag=0; temp=0; index=15; for(i=1;i<=4;i++){ scanf("%s",str); for(j=0;j<4;j++){ if(str[j]=='+') temp+=(1<<(15-index)); index--; } } //flag=1; memset(visit,0,sizeof(visit)); k=bfs(temp); i=0; printf("%d\n",arr[k].step); route[i]=k; k=arr[k].pre; while(k!=-1){ route[++i]=k; k=arr[k].pre; } for(j=i-1;j>=0;j--) printf("%d %d\n",arr[route[j]].x,arr[route[j]].y); return 0; } 结果: -+-- ---- ---- -+-- 6 1 1 1 2 1 4 4 1 4 2 4 4 Press any key to continue 这是为什么?? Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator