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

            PKU1137 The New Villa 裸BFS+位壓縮判重

            http://poj.org/problem?id=1137
            題目是說,一個人要從1號房間走到N號房間,每間房間里可能有其他房間燈的開關(guān),這個人只能走到燈開著的房間里。開始時1號房間燈開著,其他房間燈都沒開,問從1號房間走到N號房間并且僅僅保留N號房間的燈至少需要多少步。
            這道題沒有SPJ,非常的惡心,走的順序應(yīng)該是如果能到別的房間先到別的房間,否則如果能關(guān)燈先關(guān)燈,然后再開燈,所有步驟內(nèi)的順序按照節(jié)點編號從小到大處理。BFS很好辦,用類似A*的牛們可能就悲劇點了~其實也好控制,在優(yōu)先級里面加入第二關(guān)鍵字就可以了。
            判重的時候還是用位壓縮。
            有點要注意是用printf將浮點數(shù)轉(zhuǎn)化為整數(shù)時一定要強制轉(zhuǎn)化下,否則也可以用%.0f輸出

              1 # include <iostream>
              2 # include <cstdio>
              3 # include <vector>
              4 # include <cmath>
              5 # include <cstring>
              6 # include <algorithm>
              7 bool used[50000];
              8 int q[50000][3],s,e;
              9 # define N 12
             10 using namespace std;
             11 vector<int> g[N];
             12 vector<int> l[N];
             13 void print(int res)
             14 {
             15             
             16               if(q[res][2]==-1return;  
             17               print(q[res][2]);
             18               int ps=q[q[res][2]][0]&((1<<11)-1),ns=q[res][0]&((1<<11)-1);
             19               if(ps>ns)
             20                 printf("- Switch off light in room %.0f.\n",log(ps-ns)/log(2.0)+1e-6);//這里輸出浮點數(shù)注意!
             21               else if(ps<ns)
             22                 printf("- Switch on light in room %.0f.\n",log(ns-ps)/log(2)+1e-6);
             23               else
             24                 printf("- Move to room %d.\n",q[res][0]>>11);             
             25 }
             26 int main()
             27 {
             28   // freopen("ans.txt","w",stdout);
             29     int n,d,s,c=1;
             30     while(true)
             31     {
             32        scanf("%d%d%d",&n,&d,&s);
             33        if(!n&&!d&&!s) break;
             34        for(int i=1;i<=n;i++)
             35        {
             36           g[i].clear();
             37           l[i].clear();
             38           
             39        }
             40        while(d--)
             41        {
             42           int u,v;
             43           scanf("%d%d",&u,&v);
             44           g[u].push_back(v);
             45           g[v].push_back(u);
             46        }
             47        while(s--)
             48        {
             49           int u,v;
             50           scanf("%d%d",&u,&v);
             51           l[u].push_back(v);
             52        }
             53        for(int i=1;i<=n;i++)
             54        {
             55          sort(g[i].begin(),g[i].end());
             56          sort(l[i].begin(),l[i].end());
             57        }
             58        s=e=-1;
             59        e=0;
             60        q[e][0]=(1<<11)|(1<<1);
             61        q[e][1]=0;
             62        q[e][2]=-1;
             63        int res=-1;
             64        memset(used,false,sizeof(used));
             65        used[q[e][0]]=true;
             66        while(s!=e&&res==-1)
             67        {
             68           int pos=q[++s][0],len=q[s][1];
             69           if(pos==((n<<11)|(1<<n))) res=s;
             70           int sta=pos&((1<<11)-1);
             71           pos>>=11;
             72           for(int i=0;i<g[pos].size();i++)
             73             if(!used[(g[pos][i]<<11)|sta]&&(sta|(1<<g[pos][i]))==sta)
             74             {
             75                used[(g[pos][i]<<11)|sta]=true;
             76                q[++e][0]=(g[pos][i]<<11)|sta;
             77                q[e][1]=len+1;
             78                q[e][2]=s;
             79             }
             80           for(int i=0;i<l[pos].size();i++)
             81             if(l[pos][i]!=pos&&(sta|(1<<l[pos][i]))==sta&&!used[(pos<<11)|(sta-(1<<l[pos][i]))])
             82             {
             83               used[(pos<<11)|(sta-(1<<l[pos][i]))]=true;
             84               q[++e][0]=(pos<<11)|(sta-(1<<l[pos][i]));
             85               q[e][1]=len+1;
             86               q[e][2]=s;
             87             }
             88           for(int i=0;i<l[pos].size();i++)
             89             if((sta|(1<<l[pos][i]))!=sta&&!used[(pos<<11)|(sta|(1<<l[pos][i]))])
             90             {
             91               used[(pos<<11)|(sta|(1<<l[pos][i]))]=true;
             92               q[++e][0]=(pos<<11)|(sta|(1<<l[pos][i]));
             93               q[e][1]=len+1;
             94               q[e][2]=s;
             95             }
             96           
             97        }
             98        printf("Villa #%d\n",c++);
             99        if(res==-1) printf("The problem cannot be solved.\n\n");
            100        else
            101        {
            102            printf("The problem can be solved in %d steps:\n",q[res][1]);
            103            print(res); 
            104            printf("\n");
            105        }
            106      
            107     }
            108     return 0;
            109 }
            110 

            posted on 2010-10-12 21:28 yzhw 閱讀(240) 評論(0)  編輯 收藏 引用 所屬分類: search

            <2010年10月>
            262728293012
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            導(dǎo)航

            統(tǒng)計

            公告

            統(tǒng)計系統(tǒng)

            留言簿(1)

            隨筆分類(227)

            文章分類(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            久久国产精品无码一区二区三区| 久久亚洲精品成人无码网站| 国产精品美女久久久m| 99久久婷婷免费国产综合精品| 久久精品免费观看| 久久91这里精品国产2020| 无码国内精品久久综合88| 蜜臀av性久久久久蜜臀aⅴ| 狠狠久久综合伊人不卡| 亚洲中文字幕久久精品无码喷水| 99精品久久精品一区二区| 伊人色综合久久天天网| 嫩草影院久久99| 中文字幕久久久久人妻| 久久精品不卡| 久久精品国产91久久综合麻豆自制| 亚洲精品97久久中文字幕无码| 免费观看久久精彩视频| 久久精品中文騷妇女内射| 久久亚洲精品国产亚洲老地址| 色综合久久精品中文字幕首页| 久久国产免费直播| 亚洲日本久久久午夜精品| 91久久精品国产免费直播| 久久久久久午夜成人影院| 国内精品九九久久精品| 综合久久一区二区三区 | 久久无码av三级| 色8久久人人97超碰香蕉987| 热久久视久久精品18| 久久综合狠狠综合久久97色| 精品99久久aaa一级毛片| 777久久精品一区二区三区无码| 久久99精品久久久久久hb无码| 无码伊人66久久大杳蕉网站谷歌| 香蕉久久夜色精品国产2020| 亚洲美日韩Av中文字幕无码久久久妻妇| 大蕉久久伊人中文字幕| 国产高清美女一级a毛片久久w| 丰满少妇人妻久久久久久4| 国产精品日韩深夜福利久久 |