• <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++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              46 Posts :: 0 Stories :: 12 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(2)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            pku 3126
            給出兩個4位素數(shù)a,b,每次a變一個位上的數(shù)字,問如何變使得變成b的步驟最少。
            先打素數(shù)表,然后在兩個素數(shù)之間,若只差一個數(shù)字,則連一條邊。最后只需從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 閱讀(299) 評論(0)  編輯 收藏 引用
            Google PageRank 
Checker - Page Rank Calculator
            色婷婷噜噜久久国产精品12p| 国产91色综合久久免费| 久久天堂AV综合合色蜜桃网| 无码任你躁久久久久久久| 亚洲精品无码久久久久| 香蕉aa三级久久毛片| 看全色黄大色大片免费久久久| 97热久久免费频精品99| 性做久久久久久久| 午夜精品久久久久久久| 久久AV无码精品人妻糸列| 色婷婷久久久SWAG精品| 色婷婷狠狠久久综合五月| 久久综合偷偷噜噜噜色| 四虎国产精品成人免费久久| 精品一二三区久久aaa片| 中文国产成人精品久久不卡| 狠狠色丁香久久婷婷综合| 久久久精品人妻一区二区三区蜜桃 | 精品少妇人妻av无码久久| 久久综合九色欧美综合狠狠| 无码乱码观看精品久久| 久久午夜福利无码1000合集| 色欲av伊人久久大香线蕉影院| 久久99国产乱子伦精品免费| 青青草国产成人久久91网| 久久黄视频| 亚洲va久久久噜噜噜久久 | 久久久国产视频| 久久成人小视频| 亚洲AV无码久久精品成人 | 日韩va亚洲va欧美va久久| 色婷婷综合久久久久中文字幕| 久久99精品久久久久子伦| 欧美777精品久久久久网| 国产叼嘿久久精品久久| 久久亚洲国产成人影院网站| 久久精品夜夜夜夜夜久久| 久久精品国产亚洲Aⅴ蜜臀色欲| 国产V综合V亚洲欧美久久| 久久久久国产精品三级网|