• <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來存儲已經(jīng)訪問過的結(jié)點。analysis中的標程有不少可以學(xué)習(xí)的地方,如幾個操作的變換,用轉(zhuǎn)換數(shù)組來寫,代碼清晰明了,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搜索

            導(dǎo)航

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

            統(tǒng)計

            常用鏈接

            留言簿(2)

            隨筆分類

            隨筆檔案

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            欧美大战日韩91综合一区婷婷久久青草 | 久久精品国产色蜜蜜麻豆| 色综合久久中文色婷婷| 99久久国产热无码精品免费 | 亚洲国产成人久久精品99| 久久99亚洲综合精品首页 | 久久精品国产欧美日韩| 久久九九免费高清视频| 久久久久国产精品三级网| 亚洲欧美久久久久9999 | 97久久精品无码一区二区天美 | 久久人搡人人玩人妻精品首页| 久久精品国产亚洲沈樵| 国产精品99久久久久久猫咪| 久久免费观看视频| 大香伊人久久精品一区二区| 国产精品中文久久久久久久| 久久人做人爽一区二区三区 | 精品久久久久久久国产潘金莲 | 99久久综合国产精品二区| 久久影视国产亚洲| 一本一道久久综合狠狠老| 久久av无码专区亚洲av桃花岛| 99久久无色码中文字幕| 久久久亚洲精品蜜桃臀| 男女久久久国产一区二区三区| 久久精品国产精品亚洲精品| 久久综合九色欧美综合狠狠 | 精品综合久久久久久97超人 | 国产午夜精品久久久久免费视| 色综合久久最新中文字幕| 午夜精品久久久久久影视riav | 国产精品久久亚洲不卡动漫| 久久综合一区二区无码| 日产精品久久久一区二区| 久久精品亚洲精品国产欧美| 人妻无码αv中文字幕久久| 久久精品一区二区三区中文字幕 | MM131亚洲国产美女久久| 精品伊人久久大线蕉色首页| 久久九九免费高清视频|