• <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 閱讀(554) 評論(0)  編輯 收藏 引用 所屬分類: AlgorithmUSACO搜索

            導航

            <2009年7月>
            2829301234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678

            統計

            常用鏈接

            留言簿(2)

            隨筆分類

            隨筆檔案

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            91精品国产高清久久久久久国产嫩草| 久久天天躁狠狠躁夜夜躁2O2O| 精品免费久久久久久久| 浪潮AV色综合久久天堂| 色综合久久88色综合天天| 精品久久人人妻人人做精品| 伊人久久大香线蕉成人| 无码AV中文字幕久久专区| 国产 亚洲 欧美 另类 久久| 欧美一区二区久久精品| 狠狠干狠狠久久| 亚洲国产天堂久久综合| 日产精品久久久久久久性色| 久久精品99无色码中文字幕| 色综合久久综合中文综合网| 国产免费久久精品丫丫| 97久久超碰国产精品2021| 久久久久久久精品成人热色戒| 久久精品成人国产午夜| 亚洲国产另类久久久精品黑人 | 国内精品久久久久久99蜜桃 | 很黄很污的网站久久mimi色| 久久综合九色综合网站| 久久精品国产亚洲av瑜伽| 7777久久亚洲中文字幕| 色偷偷88888欧美精品久久久| 久久e热在这里只有国产中文精品99 | 欧美丰满熟妇BBB久久久| 久久亚洲国产成人精品无码区| 无码人妻精品一区二区三区久久久 | 国内精品久久久久影院日本| 国产成人精品三上悠亚久久| 久久亚洲av无码精品浪潮| 一级做a爰片久久毛片人呢| 久久国产精品77777| 久久人妻少妇嫩草AV无码专区| 精品久久亚洲中文无码| 久久久久av无码免费网| 伊人久久精品无码二区麻豆| 亚洲国产精品18久久久久久| 久久精品国产亚洲αv忘忧草|