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

            導航

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

            統計

            常用鏈接

            留言簿(2)

            隨筆分類

            隨筆檔案

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            日韩av无码久久精品免费| 久久久精品波多野结衣| 日产精品久久久久久久| 久久99精品国产| 久久精品成人欧美大片| 怡红院日本一道日本久久| 三级片免费观看久久| 日产精品99久久久久久| 国产精品亚洲综合专区片高清久久久| 国产精品永久久久久久久久久| 久久只这里是精品66| 国产精品久久久久影视不卡| 久久亚洲精品无码观看不卡| 精品久久久久久无码中文字幕一区 | 久久棈精品久久久久久噜噜| 久久久久久久99精品免费观看| 亚洲国产精品狼友中文久久久| 久久久青草青青亚洲国产免观| 亚洲国产成人久久一区WWW| 2021久久精品国产99国产精品| 亚洲а∨天堂久久精品9966| 中文字幕亚洲综合久久2| 欧美丰满熟妇BBB久久久| 中文字幕久久亚洲一区| 91精品日韩人妻无码久久不卡| 无遮挡粉嫩小泬久久久久久久| 亚洲国产精品综合久久网络| 国内精品久久久久久不卡影院| 国产午夜免费高清久久影院| 无码人妻久久一区二区三区免费丨| 青草久久久国产线免观| 久久国产成人| 无码人妻少妇久久中文字幕 | 亚洲欧美一级久久精品| 久久人人爽人人爽人人片AV东京热 | 精品国产91久久久久久久a| 久久久久人妻精品一区二区三区 | 婷婷伊人久久大香线蕉AV| 色偷偷88888欧美精品久久久 | 九九99精品久久久久久| 久久国产乱子精品免费女|