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

            USACO 3.2 Magic Squares

            ?BFS搜索題。代碼寫的比較亂,用一個set來存儲已經訪問過的結點。analysis中的標程有不少可以學習的地方,如幾個操作的變換,用轉換數組來寫,代碼清晰明了,encode方法就省去了set。我通過保存整個樹來輸出解,標程通過反向操作,來輸出解,做法很巧妙。

            #include?<iostream>
            #include?
            <fstream>
            #include?
            <set>
            #include?
            <queue>

            using?namespace?std;

            ifstream?fin(
            "msquare.in");
            ofstream?fout(
            "msquare.out");

            #ifdef?_DEBUG
            #define?out?cout
            #define?in?cin
            #else
            #define?out?fout
            #define?in?fin
            #endif

            int?final[8];
            set<int>visited;
            char?result[8*7*6*5*4*3*2*1+1];

            struct?queue_node{
            ????
            int?current[8];
            ????queue_node?
            *parent;
            ????
            char?op;
            };

            void?op(int?*current,char?c)
            {
            ????
            int?tmp;
            ????
            switch(c){
            ????????
            case?'A':
            ????????????
            for(int?i=0;i<4;++i)
            ????????????????swap(current[i],current[
            7-i]);
            ????????????
            break;
            ????????
            case?'B':
            ????????????tmp?
            =?current[3];
            ????????????
            for(int?i=3;i>=1;--i)
            ????????????????current[i]?
            =?current[i-1];
            ????????????current[
            0]?=?tmp;
            ????????????tmp?
            =?current[4];
            ????????????
            for(int?i=4;i<=6;++i)
            ????????????????current[i]?
            =?current[i+1];
            ????????????current[
            7]?=?tmp;
            ????????????
            break;
            ????????
            case?'C':
            ????????????tmp?
            =?current[6];
            ????????????current[
            6]?=?current[5];
            ????????????current[
            5]?=?current[2];
            ????????????current[
            2]?=?current[1];
            ????????????current[
            1]?=?tmp;
            ????????????
            break;
            ????}
            }

            int?cur_value(int?*cur)
            {
            ????
            int?res?=?0;
            ????
            for(int?i=0;i<8;++i){
            ????????res
            *=10;
            ????????res
            +=cur[i];
            ????}

            ????
            return?res;
            }


            void?solve()
            {
            ????
            for(int?i=0;i<8;++i){
            ????????
            in>>final[i];
            ????}

            ????queue
            <queue_node*>?q;
            ????queue_node?
            *node?=?new?queue_node;
            ????
            for(int?i=0;i<8;++i)
            ????????node
            ->current[i]?=?i+1;

            ????node
            ->parent?=?NULL;

            ????q.push(node);

            ????
            while(?!q.empty()?){
            ????????queue_node?
            *node?=?q.front();
            ????????q.pop();

            ????????
            int?cur?=?cur_value(node->current);
            ????????
            if(?visited.find(?cur)?!=?visited.end())
            ????????????
            continue;
            ????????visited.insert(cur);

            ????????
            bool?ok?=?true;
            ????????
            for(int?i=0;i<8;++i){
            ????????????
            if(node->current[i]!=final[i]){
            ????????????????ok?
            =?false;
            ????????????????
            break;
            ????????????}
            ????????}

            ????????
            if(ok){
            ????????????
            int?i?=?0;
            ????????????
            while(node->parent!=NULL){
            ????????????????result[i
            ++]?=?node->op;
            ????????????????node
            =node->parent;
            ????????????}

            ????????????
            if(i==0){
            ????????????????
            out<<0<<endl<<endl;
            ????????????????exit(
            0);
            ????????????}

            ????????????
            out<<i<<endl;

            ????????????
            int?j;
            ????????????i
            --;
            ????????????
            for(j=0;i>=0;i--,j++){
            ????????????????
            out<<result[i];
            ????????????????
            if(j%60==59)?out<<endl;
            ????????????}
            ????????????
            ????????????
            if(j%60!=0)
            ????????????????
            out<<endl;

            ????????????exit(
            0);
            ????????}

            ????????
            for(char?c='A';c<='C';++c){
            ????????????queue_node?
            *?n?=?new?queue_node;
            ????????????memcpy(n
            ->current,node->current,sizeof(node->current));
            ????????????op(n
            ->current,c);
            ????????????n
            ->op?=?c;
            ????????????n
            ->parent?=?node;
            ????????????q.push(n);
            ????????}
            ????}
            }

            int?main(int?argc,char?*argv[])
            {
            ????solve();?
            ????
            return?0;
            }


            posted on 2009-07-06 20:01 YZY 閱讀(549) 評論(0)  編輯 收藏 引用 所屬分類: AlgorithmUSACO搜索

            導航

            <2009年6月>
            31123456
            78910111213
            14151617181920
            21222324252627
            2829301234
            567891011

            統計

            常用鏈接

            留言簿(2)

            隨筆分類

            隨筆檔案

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            中文字幕精品久久久久人妻| 国产美女久久久| 污污内射久久一区二区欧美日韩| 66精品综合久久久久久久| 国产精品永久久久久久久久久| 欧美日韩精品久久久久| 精品国产乱码久久久久软件| 国产精品久久波多野结衣| 久久久久亚洲?V成人无码| 亚洲国产精品久久电影欧美| 7国产欧美日韩综合天堂中文久久久久 | 久久久久国色AV免费观看| 国产精品乱码久久久久久软件| 日本久久久久亚洲中字幕 | 成人久久久观看免费毛片| 亚洲国产日韩欧美久久| 国产精品久久久久影院色| 91麻豆国产精品91久久久| 一级做a爰片久久毛片人呢| 亚洲精品tv久久久久久久久| 久久久久成人精品无码| 国内精品伊人久久久久AV影院| 中文字幕无码久久人妻| 久久久久一本毛久久久| 国产成人无码精品久久久久免费| 久久精品国产亚洲AV香蕉| 久久99久久99精品免视看动漫| 久久激情亚洲精品无码?V| 国产综合免费精品久久久| 久久精品一区二区| 久久久久久久综合日本亚洲| 久久青青草原亚洲av无码app| 99久久综合国产精品免费| 亚洲精品乱码久久久久久蜜桃| 狠狠综合久久综合中文88| 99久久亚洲综合精品网站| 国产99精品久久| 久久精品9988| 国产精品热久久无码av| 天天影视色香欲综合久久| 久久99这里只有精品国产|