• <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)

            我參與的團(tuán)隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            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)  編輯 收藏 引用

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            Google PageRank 
Checker - Page Rank Calculator
            亚洲人成网站999久久久综合| 亚洲国产精品高清久久久| 久久精品青青草原伊人| 色综合久久久久网| 激情伊人五月天久久综合 | 伊色综合久久之综合久久| 久久中文字幕一区二区| 99久久99这里只有免费费精品| 亚洲色欲久久久综合网东京热| 精品国产日韩久久亚洲| 国产精品久久久久a影院| 久久久久亚洲av成人网人人软件| 亚洲伊人久久成综合人影院| 久久夜色精品国产亚洲| 狠狠精品久久久无码中文字幕| 亚洲国产精品一区二区久久hs| 国产亚洲美女精品久久久2020| 亚洲精品乱码久久久久久自慰| 久久婷婷成人综合色综合| 国产情侣久久久久aⅴ免费| 伊人久久综在合线亚洲2019| 久久免费大片| 国产69精品久久久久APP下载| 久久亚洲精品无码VA大香大香| 久久久久久久久波多野高潮| 无码人妻少妇久久中文字幕蜜桃| 国产精品一区二区久久不卡 | 久久精品国产欧美日韩99热| 久久久久久亚洲精品影院| 久久久无码精品亚洲日韩蜜臀浪潮| 久久综合久久自在自线精品自| 久久久久国产一级毛片高清版| 色婷婷综合久久久久中文字幕| 思思久久精品在热线热| www.久久热| 一本久久精品一区二区| 久久久久国产精品| 精品综合久久久久久98| 久久综合九色综合久99| 97精品伊人久久久大香线蕉 | 国产精品一区二区久久|