注意 标记hash[],不然会错(数据状态好像很多 ,所以要标记) http://poj.org/problem?id=3185 #include<stdio.h> #include<string.h> #define N 1000000 struct node { int num; int step; }p[N]; bool hash[1048576]; int d[20]={0xC0000,0xE0000,0x70000,0x38000,0x1C000,0xE000,0x7000,0x3800,0x1C00, 0xE00,0x700,0x380,0x1C0,0xE0,0x70,0x38,0x1C,0xE,0x7,0x3}; int bfs(int num) { memset(hash,0,sizeof(hash)); int head=0,tail=0,i; p[head].num=num; p[head].step=0; tail++; while(head<tail) { int k=p[head].num; if(k==0)return p[head].step; for(i=0;i<20;i++) { int x=k^d[i]; if(x==0)return p[head].step+1; else { if(hash[x])continue; hash[x]=1; p[tail].num=x; p[tail].step=p[head].step+1; tail++; if(tail==N-1)tail=0; } } head++; } } int main() { int a,f,i,j; int num=0; for(i=1;i<=20;i++) { scanf("%d",&a); num<<=1; num+=a; } int ans=bfs(num); printf("%d\n",ans); }