• <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
            久久人人超碰精品CAOPOREN| 久久精品国产亚洲AV高清热| 久久青青草原精品国产软件| 久久久久国产一区二区| 伊人久久国产免费观看视频| 久久夜色精品国产噜噜噜亚洲AV| 国产精品美女久久久m| 久久久久久噜噜精品免费直播 | 久久国产精品国语对白| 国产精品久久久久蜜芽| 久久精品中文闷骚内射| 久久国产免费| 久久国产精品成人片免费| 久久强奷乱码老熟女网站| avtt天堂网久久精品| 欧美日韩中文字幕久久久不卡| 无码国内精品久久人妻| 久久久久一级精品亚洲国产成人综合AV区 | 人妻久久久一区二区三区| 国产成人久久777777| 无码AV中文字幕久久专区| 精品综合久久久久久88小说| 久久国产精品无码一区二区三区| 少妇久久久久久被弄到高潮| 久久电影网一区| 狠狠88综合久久久久综合网 | 国产激情久久久久影院小草 | 久久久久久人妻无码| 欧美亚洲日本久久精品| 99久久夜色精品国产网站| 久久久久久久综合日本亚洲 | 99久久国产亚洲高清观看2024 | 四虎国产精品免费久久久| 久久久久亚洲AV无码专区体验| 久久人妻少妇嫩草AV无码蜜桃| 国产精品久久久天天影视香蕉 | 亚洲人成无码www久久久| 伊人久久大香线蕉影院95| 国产精品99久久不卡| 国产A级毛片久久久精品毛片| 久久99国产精品一区二区|