• <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,勉強16MS AC.
            題意就是有名的倒水游戲,給你2個一定容量的容器,然后要求你配出一定兩的溶液并輸出每一步的決策;
            此題的算法當(dāng)然是BFS啦,不過貌似有人告訴我說數(shù)論里有更好的方法,我感覺也是這樣,我寫的代碼實在是有點冗長。。。
                algorithm=搜索+回溯。   有這幾個字就足夠了;
            值得一提的是,本題中不能將一個結(jié)點反復(fù)入隊,而避免的方法不是更改flag標(biāo)志,而是判斷這個結(jié)點是否有前件。
            我總結(jié)下這類題的規(guī)律:
            一是BFS代碼一般都很長;
            二是要回溯的題目不能讓你個元素二次入隊。因為這樣會修改已經(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 閱讀(1048) 評論(0)  編輯 收藏 引用


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


            久久香蕉国产线看观看猫咪?v| 欧洲人妻丰满av无码久久不卡| 精品久久久久久中文字幕| 久久A级毛片免费观看| 999久久久国产精品| 欧美一级久久久久久久大片| 少妇久久久久久久久久| 91精品婷婷国产综合久久| 久久久这里有精品| 9999国产精品欧美久久久久久| 久久精品久久久久观看99水蜜桃| 88久久精品无码一区二区毛片| 97视频久久久| 久久夜色撩人精品国产| .精品久久久麻豆国产精品| 久久婷婷五月综合国产尤物app| 精品精品国产自在久久高清| 欧美国产成人久久精品| 99久久精品免费看国产免费| 亚洲午夜久久久久久久久电影网| 免费精品久久久久久中文字幕| 国产成人综合久久综合| 人妻精品久久无码区| 久久久www免费人成精品| 久久久久噜噜噜亚洲熟女综合| 久久国产高清字幕中文| 精品久久久久香蕉网| 亚洲国产精品一区二区久久hs| 国产精品99久久久精品无码| 久久中文字幕视频、最近更新| 色综合久久综精品| 2021精品国产综合久久| 99久久精品毛片免费播放| 一本一道久久综合狠狠老| 久久99国产精品久久99小说| 亚洲午夜福利精品久久| 欧美麻豆久久久久久中文| 亚洲国产成人久久一区WWW| 日本精品久久久久久久久免费| 久久一区二区免费播放| 久久久久一本毛久久久|