1 4 9 32 10 12
Case 1: 1 Case 2: 7 Case 3: impossible
<span style="font-size:18px;">#include<iostream> #include<string.h> #include<queue> using namespace std; const int M=110; // 设定一个全局常量非常方便 int cnt[M][M]; int primer[M*M]; int vis[M][M]; int s,e,t=0; int dir[][2]= {{0,1},{1,0},{-1,0},{0,-1}};//控制四个方向 struct node { int x,y,step; }; void prime() // 打印素数表 { memset(primer,0,sizeof(primer)); for(int i=2; i<=M; i++) { if(!primer[i]) for(int j=i*i; j<=M*M; j+=i) { primer[j]=1; } } primer[1]=1; } void inti() //初始化方格,把素数全都置为0,非素数按值存储 { memset(cnt,0,sizeof(cnt)); int tot=M*M; int x,y; x=0; y=0; cnt[0][0]=tot; while(tot>1) { while(y+1<M&&!cnt[x][y+1]) { if(!primer[--tot]) { cnt[x][++y]=0; } else { y++; cnt[x][y]=tot; } } while(x+1<M&&!cnt[x+1][y]) { if(!primer[--tot]) { cnt[++x][y]=0; } else { x++; cnt[x][y]=tot; } } while(y-1>=0&&!cnt[x][y-1]) { if(!primer[--tot]) { cnt[x][--y]=0; } else { y--; cnt[x][y]=tot; } } while(x-1>=0&&!cnt[x-1][y]) { if(!primer[--tot]) { cnt[--x][y]=0; } else { x--; cnt[x][y]=tot; } } } } void bfs(int x,int y) { queue<node>dict; node cur,next; cur.x=x; cur.y=y; cur.step=0; dict.push(cur); memset(vis,0,sizeof(vis)); // 初始化vis; vis[x][y]=1; //第一个点标记已经访问过。 int ok=1; while(!dict.empty()) { cur=dict.front(); dict.pop(); //调bug时发现拉下一次这个,结果导致无限循环 for(int i=0; i<4; i++) { int tx=cur.x+dir[i][0]; int ty=cur.y+dir[i][1]; if(tx>=0&&ty>=0&&tx<M&&ty<M&&cnt[tx][ty]&&!vis[tx][ty])//当前节点的邻接结点是否满足访问条件若满足更新邻接结点属性 { vis[tx][ty]=1; next.x=tx; next.y=ty; next.step=cur.step+1; if(cnt[next.x][next.y]==e) { ok=0; // 用ok标记成功找到 不再进行循环 cout<<"Case "<<++t<<": "<<next.step<<endl; break; } dict.push(next); } } if(!ok) break; } if(ok)//当队列为空的时候还是没有找到,那么…… cout<<"Case "<<++t<<": "<<"impossible"<<endl; } int main() { int si,sj; prime(); inti(); while(cin>>s>>e) { if(s==e) //这是一个致命的错误,最后一个bug出在这里 { cout<<0<<endl; continue; } int flag=1; for(int i=0; ; i++) // 搜锁起始位置 { for(int j=0; j<M; j++) { if(cnt[i][j]==s) { flag=0; si=i; sj=j; break; } } if(!flag) break; } bfs(si,sj); } return 0; } </span>
原文地址:http://blog.csdn.net/lsgqjh/article/details/45653363