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

            The Fourth Dimension Space

            枯葉北風(fēng)寒,忽然年以殘,念往昔,語默心酸。二十光陰無一物,韶光賤,寐難安; 不畏形影單,道途阻且慢,哪曲折,如渡飛湍。斬浪劈波酬壯志,同把酒,共言歡! -如夢令

            POJ 3414-Pots BFS (代碼好長啊 ,建議大家不要看了)

            有史以來寫的最爛的一個程序,居然寫到5000B,勉強(qiáng)16MS AC.
            題意就是有名的倒水游戲,給你2個一定容量的容器,然后要求你配出一定兩的溶液并輸出每一步的決策;
            此題的算法當(dāng)然是BFS啦,不過貌似有人告訴我說數(shù)論里有更好的方法,我感覺也是這樣,我寫的代碼實(shí)在是有點(diǎn)冗長。。。
                algorithm=搜索+回溯。   有這幾個字就足夠了;
            值得一提的是,本題中不能將一個結(jié)點(diǎn)反復(fù)入隊(duì),而避免的方法不是更改flag標(biāo)志,而是判斷這個結(jié)點(diǎn)是否有前件。
            我總結(jié)下這類題的規(guī)律:
            一是BFS代碼一般都很長;
            二是要回溯的題目不能讓你個元素二次入隊(duì)。因?yàn)檫@樣會修改已經(jīng)設(shè)定好的元素的前件,到時候就無法回溯了。
            代碼還是貼上來吧,不值得學(xué)習(xí),僅供參考;
            #include <iostream>
            #include
            <cmath>
            #include
            <algorithm>
            using namespace std;
            struct node2
            {
                
            int flag;
                
            int prex;
                
            int prey;

            }
            ;

            struct node
            {
                
            int x;
                
            int y;
            }
            ;



            node line[
            10000000];
            node record[
            100000];
            node2 data[
            201][201];



            int main ()
            {

                
            int a,b,c;
                scanf(
            "%d%d%d",&a,&b,&c);
                
            int front=1;
                
            int rear=1;
                line[
            1].x=0;
                line[
            1].y=0;

                
            while(front<=rear)
                
            {

                    
            if(line[front].x==c||line[front].y==c)
                        
            break;


                    
            if(data[line[front].x][line[front].y].flag==0)
                    
            {
                        data[line[front].x][line[front].y].flag
            =1;
                        
            if(line[front].x!=a&&data[a][line[front].y].flag==0&&data[a][line[front].y].prex==0&&data[a][line[front].y].prey==0)
                        
            {

                            rear
            ++;
                            line[rear].x
            =a;
                            line[rear].y
            =line[front].y;
                            data[line[rear].x][line[rear].y].prex
            =line[front].x;
                            data[line[rear].x][line[rear].y].prey
            =line[front].y;

                        }

                        
            if(line[front].y!=b&&data[line[front].x][b].flag==0&&data[line[front].x][b].prex==0&&data[line[front].x][b].prey==0)
                        
            {

                            rear
            ++;
                            line[rear].x
            =line[front].x;
                            line[rear].y
            =b;
                            data[line[rear].x][line[rear].y].prex
            =line[front].x;
                            data[line[rear].x][line[rear].y].prey
            =line[front].y;
                        }

                        
            if(line[front].x!=0&&data[0][line[front].y].flag==0&&data[0][line[front].y].prex==0&&data[0][line[front].y].prey==0)
                        
            {

                            rear
            ++;
                            line[rear].x
            =0;
                            line[rear].y
            =line[front].y;
                            data[line[rear].x][line[rear].y].prex
            =line[front].x;
                            data[line[rear].x][line[rear].y].prey
            =line[front].y;

                        }

                        
            if(line[front].y!=0&&data[line[front].x][0].flag==0&&data[line[front].x][0].prex==0&&data[line[front].x][0].prey==0)
                        
            {

                            rear
            ++;
                            line[rear].x
            =line[front].x;
                            line[rear].y
            =0;
                            data[line[rear].x][line[rear].y].prex
            =line[front].x;
                            data[line[rear].x][line[rear].y].prey
            =line[front].y;
                        }

                        
            if(line[front].x!=0&&line[front].y!=b)
                        
            {


                            
            if(line[front].x+line[front].y>b&&data[line[front].x-b+line[front].y][b].flag==0&&data[line[front].x-b+line[front].y][b].prex==0&&data[line[front].x-b+line[front].y][b].prey==0)
                            
            {
                                rear
            ++;
                                
            int temp;
                                temp
            =b-line[front].y;

                                line[rear].x
            =line[front].x-temp;
                                line[rear].y
            =b;
                                data[line[rear].x][line[rear].y].prex
            =line[front].x;
                                data[line[rear].x][line[rear].y].prey
            =line[front].y;

                            }

                            
            else if(data[0][line[front].x+line[front].y].flag==0&&data[0][line[front].x+line[front].y].prex==0&&data[0][line[front].x+line[front].y].prey==0)
                            
            {
                                rear
            ++;
                                
            int temp;
                                line[rear].x
            =0;
                                line[rear].y
            =line[front].x+line[front].y;
                                data[line[rear].x][line[rear].y].prex
            =line[front].x;
                                data[line[rear].x][line[rear].y].prey
            =line[front].y;

                            }

                        }


                            
            ////////////////////////////////////////////////////////////////////////////
                        if(line[front].y!=0&&line[front].x!=a)
                        
            {
                
                            
                            
            if(line[front].x+line[front].y>a&&data[a][line[front].y-a+line[front].x].flag==0&&data[a][line[front].y-a+line[front].x].prex==0&&data[a][line[front].y-a+line[front].x].prey==0)
                            
            {
                                
            int temp;
                                rear
            ++;
                                temp
            =a-line[front].x;
                                line[rear].y
            =line[front].y-temp;
                                line[rear].x
            =a;
                                data[line[rear].x][line[rear].y].prex
            =line[front].x;
                                data[line[rear].x][line[rear].y].prey
            =line[front].y;

                            }

                            
            else if(data[line[front].x+line[front].y][0].flag==0&&data[line[front].x+line[front].y][0].prex==0&&data[line[front].x+line[front].y][0].prey==0)
                            
            {
                                
            int temp;
                                rear
            ++;
                                line[rear].y
            =0;
                                line[rear].x
            =line[front].x+line[front].y;
                                data[line[rear].x][line[rear].y].prex
            =line[front].x;
                                data[line[rear].x][line[rear].y].prey
            =line[front].y;
                            }

                        }



                    }

                    front
            ++;
                }


                
            if(front>rear)
                
            {
                    printf(
            "impossible\n");
                    
            return 0;
                }

                
            int pos=1;
                
            int markx=line[front].x;
                
            int marky=line[front].y;
                
            int tempx;
                
            int tempy;
                
            while(1)
                
            {
                    
            if(markx==0&&marky==0)
                    
            {
                        
            break;
                    }

                    record[pos].x
            =markx;
                    record[pos].y
            =marky;
                    
            int tempx=markx;
                    
            int tempy=marky;
                    markx
            =data[tempx][tempy].prex;
                    marky
            =data[tempx][tempy].prey;
                    pos
            ++;
                }

                record[pos].x
            =0;
                record[pos].y
            =0;
                printf(
            "%d\n",pos-1);

                
            int i;
                
            for(i=pos;i>=2;i--)
                
            {
                    
            if(record[i].x==0&&record[i-1].x==a&&record[i].y==record[i-1].y)
                        printf(
            "FILL(1)\n");
                    
            else if(record[i].y==0&&record[i-1].y==b&&record[i].x==record[i-1].x)
                            printf(
            "FILL(2)\n");
                    
            else if(record[i].x!=0&&record[i-1].x==0&&record[i].y==record[i-1].y)
                        printf(
            "DROP(1)\n");
                    
            else if(record[i].y!=0&&record[i-1].y==0&&record[i].x==record[i-1].x)
                        printf(
            "DROP(2)\n");
                    
            else if(record[i].x>record[i-1].x)
                        printf(
            "POUR(1,2)\n");
                    
            else if(record[i].x<record[i-1].x)
                        printf(
            "POUR(2,1)\n");
                }

                
            return 0;
            }

                








            posted on 2009-03-01 01:10 abilitytao 閱讀(1047) 評論(0)  編輯 收藏 引用


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


            久久精品亚洲精品国产色婷| 久久国产精品波多野结衣AV| 亚洲精品视频久久久| 久久综合综合久久97色| 久久99热国产这有精品| 狠狠色婷婷综合天天久久丁香| 久久久无码一区二区三区| 国产精品久久久久久吹潮| 国产精品18久久久久久vr| 久久99国产精品二区不卡| 久久精品成人欧美大片| 亚洲性久久久影院| 97精品国产97久久久久久免费| 亚洲色欲久久久综合网| www性久久久com| 亚洲国产精品久久| 亚洲国产精品综合久久一线| 狼狼综合久久久久综合网| 久久精品午夜一区二区福利| 久久成人永久免费播放| 久久人做人爽一区二区三区| 人妻无码αv中文字幕久久琪琪布| 久久99国产精品久久久| 欧美一级久久久久久久大| 亚洲AV无码久久精品蜜桃| 国内精品久久久久久野外| 久久久免费观成人影院 | 久久人人爽人人人人爽AV| 久久久久亚洲AV无码专区体验| 久久免费精品视频| 国产亚洲精品久久久久秋霞| 久久99国产精品一区二区| 日本WV一本一道久久香蕉| 久久久91精品国产一区二区三区| 亚洲国产香蕉人人爽成AV片久久| 久久精品亚洲日本波多野结衣| 亚洲欧美日韩精品久久亚洲区| 久久亚洲欧美日本精品| 久久精品无码专区免费青青| 无码AV波多野结衣久久| 国产偷久久久精品专区|