• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            bon

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              46 Posts :: 0 Stories :: 12 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(2)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            pku 3126
            給出兩個4位素數a,b,每次a變一個位上的數字,問如何變使得變成b的步驟最少。
            先打素數表,然后在兩個素數之間,若只差一個數字,則連一條邊。最后只需從a寬搜到b即可。
            // 搜索
            #include <iostream>
            #include 
            <math.h>

            using namespace std;

            int p[1300];
            bool G[
            1300][1300],d[1300];
            int cnt;
            int target;

            void prim()
            {
                
            //memset(p,0,sizeof(p));
                cnt=0;
                
            int i;
                
            for(i=1000;i<10000;i++)
                {
                    
            int up=(int)sqrt(i),flag=0;
                    
            for(int j=2;j<=up;j++)
                    {
                        
            if(i%j==0) {flag=1;break;}
                    }
                    
            if(flag==0) {p[cnt++]=i;}
                }
                
            //printf("%d\n",cnt);
                
            //for(i=0;i<cnt;i++) printf("%d ",p[i]);
                return;
            }

            bool ok(
            int a,int b)
            {
                
            int aa[4],bb[4];
                memset(aa,
            0,sizeof(aa));
                memset(bb,
            0,sizeof(bb));
                
            int i=0;
                
            while(a!=0)
                {
                    aa[i
            ++]=a%10;
                    a
            /=10;
                }
                i
            =0;
                
            while(b!=0) {bb[i++]=b%10;b/=10;}
                
            int flag=0;
                
            for(i=0;i<4;i++if(aa[i]!=bb[i]) flag++;
                
            if(flag!=1return false;
                
            return true;
            }

            void buildG()
            {
                
            int i,j,k;
                memset(G,
            0,sizeof(G));
                
            for(i=0;i<cnt;i++)
                {
                    
            for(j=i+1;j<=cnt;j++)
                    {
                        
                        
            if(ok(p[i],p[j])) G[i][j]=G[j][i]=1;
                    }
                }
            }

            void bfs(int s)
            {
                
            int track[1300],dis[1300],visit[1300];
                memset(visit,
            0,sizeof(visit));
                memset(track,
            -1,sizeof(track));
                
            int q[1300];
                q[
            0]=s;
                
            int head=0,tail=1,tmp=1;

                
            int maxi=-1;
                dis[s]
            =0;
                visit[s]
            =1;
                track[s]
            =s;
                
            int step=0;
                bool found
            =0;
                
            int final;
                
            while(head<tail && !found)
                {
                    
            int x=q[head++];
                    
            for(int i=0;i<cnt;i++)
                    {
                        
            if(G[x][i]==1 && visit[i]==0)
                        {
                            visit[i]
            =1;
                            dis[i]
            =dis[x]+1;
                            track[i]
            =x;
                            
            if(dis[i]>maxi) maxi=dis[i];
                            
            if(p[i]==target) {final=x;found=1;break;}
                            q[tail
            ++]=i;
                        }
                    }
                }
                
            if(!found) printf("Impossible\n");
                
            else
                {
                    printf(
            "%d\n",maxi);
                    
            //while(track[final]!=final){printf("%d\n",p[final]); final=track[final];}
                }
                
            return;
            }

            int main()
            {
                
            //freopen("out.txt","w",stdout);
                prim();
                buildG();
                
            int c,i;
                scanf(
            "%d",&c);
                
            while(c--)
                {
                    
            int s;
                    scanf(
            "%d%d",&s,&target);
                    
            if(s==target) {printf("0\n");continue;}
                    
            for(i=0;i<cnt;i++if(p[i]==s) break;
                    s
            =i;
                    bfs(s);
                }
                
            return 1;
            }
            posted on 2008-03-01 09:34 bon 閱讀(301) 評論(0)  編輯 收藏 引用
            Google PageRank 
Checker - Page Rank Calculator
            久久久久亚洲av成人无码电影| 久久亚洲AV成人无码国产| 国产精品美女久久久m| 狠狠色丁香婷婷综合久久来 | 99久久免费只有精品国产| 久久久久久一区国产精品| 亚洲αv久久久噜噜噜噜噜| 色综合久久精品中文字幕首页| 久久久黄片| 亚洲国产成人久久综合碰碰动漫3d| 久久天天躁狠狠躁夜夜av浪潮 | 精品久久久久久国产三级 | 国产精品嫩草影院久久| 精品伊人久久大线蕉色首页| 久久精品国产精品国产精品污| 亚洲日韩欧美一区久久久久我| 99久久免费国产精品热| 久久久久av无码免费网| 精品国产热久久久福利| 久久综合九色综合精品| 青草国产精品久久久久久| 亚洲精品WWW久久久久久 | 久久精品一本到99热免费| 久久人人爽人爽人人爽av| 久久w5ww成w人免费| 久久久久免费精品国产| 人人狠狠综合久久亚洲高清| 久久精品成人国产午夜| 久久国产精品成人影院| 久久久噜噜噜www成人网| 99蜜桃臀久久久欧美精品网站| 麻豆国内精品久久久久久| 久久久无码精品亚洲日韩软件| 99久久精品费精品国产| 亚洲国产精品久久久久| 成人a毛片久久免费播放| 久久香蕉综合色一综合色88| 久久91精品国产91久久小草| 国产精品一区二区久久国产| 久久久久亚洲Av无码专| 久久综合丁香激情久久|