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

            隨筆分類

            隨筆檔案

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            久久久高清免费视频| 色88久久久久高潮综合影院| 成人综合伊人五月婷久久| 亚洲级αV无码毛片久久精品| 中文字幕日本人妻久久久免费 | 999久久久国产精品| 久久国产午夜精品一区二区三区| 久久婷婷五月综合色99啪ak| 国内精品伊人久久久影院| 久久久久国产精品熟女影院| 久久成人18免费网站| 无码人妻少妇久久中文字幕蜜桃 | 伊人久久无码中文字幕| 99久久精品日本一区二区免费| 久久国产精品免费一区二区三区| 综合久久一区二区三区 | 国产午夜精品理论片久久| 久久精品青青草原伊人| 久久不见久久见免费影院www日本| 亚洲国产精品无码久久一区二区| 国产精品久久久99| 国内精品久久久久伊人av| 久久久国产视频| 亚洲国产视频久久| 久久国产精品免费一区| 国产一区二区三区久久| 久久香蕉国产线看观看精品yw| 日本精品久久久久久久久免费| 一本一道久久精品综合| 精品一区二区久久| 久久国产亚洲精品无码| 亚洲国产美女精品久久久久∴ | 青青草原综合久久大伊人导航| 国内精品久久久久久久97牛牛| 久久综合给合久久狠狠狠97色69| 亚洲欧美一区二区三区久久| 久久人人超碰精品CAOPOREN | 日本高清无卡码一区二区久久| 精品无码久久久久久久久久| 国产高潮国产高潮久久久91 | 国产精品久久久久无码av|