日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【 HDU1043-经典BFS+康拓展开 八数码】 (待更)

發布時間:2025/4/16 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【 HDU1043-经典BFS+康拓展开 八数码】 (待更) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

給定一個序列,由1~8數字和字母x組成,表示的是一個3*3的矩形。每次操作x都能與相鄰的數字交換,問如何操作才能使得序列為{1,2,3,4,5,6,7,8,x}。
?

//多組數據-需要計算全部路徑后直接輸出 //反向搜索+打表(離線) #include<iostream> #include<cstring> #include<cstdio> #include<queue> using namespace std; #define MAX 400000 #define AIM 46234 //123456780對應的康托Hash值 bool v[MAX]; char path[MAX][40]; //總路徑 int len; //路徑長/*udlr*/ char *dir = "durl"; //反向搜索 int mov[4][2] = { { -1, 0 }, { 1, 0 }, { 0, -1 }, { 0, 1 } }; //八數碼狀態結構體 struct Node{int s[9];int loc; //空位int status; //Hash值-排列值int fa; //記錄父狀態char d; //到此狀態的移動方向 }n[MAX]; int fac[10] = { 1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880 }; //康托逆展開-返回Hash值 int Inverse_cantor(int s[9]) {int sum = 0;for (int i = 0; i < 9; i++){int num = 0; //逆序數計數器for (int j = i + 1; j < 9; j++)if (s[j] < s[i])num++;sum += num*fac[9 - i - 1];}return sum + 1; } /*反向記錄路徑*/ void count_path(Node end) {int status = end.status;int f = end.fa;len = 0;path[status][len++] = end.d;while (f){path[status][len++] = n[f].d;//方向記錄f = n[f].fa; //查找父結點} } void BFS() {memset(v, 0, sizeof(v));Node next; //下一臨時狀態int head = 0, tail = 0;/*目標狀態*/for (int i = 0; i < 8; i++)n[0].s[i] = i + 1;n[0].s[8] = 0;n[0].loc = 8;n[0].status = AIM;v[AIM] = true;while (head <= tail) //模擬隊列{//計算二維坐標int x = n[head].loc / 3;int y = n[head].loc % 3;for (int i = 0; i < 4; i++) //遍歷四方向{int tx = x + mov[i][0];int ty = y + mov[i][1];if (tx < 0 || tx>2 || ty < 0 || ty>2)continue;//新狀態更新next = n[head];next.loc = tx * 3 + ty; //計算新空位next.s[n[head].loc] = next.s[next.loc]; //原空位替換next.s[next.loc] = 0; //新空位next.fa = head;next.d = dir[i];next.status = Inverse_cantor(next.s);//判重并入隊if (!v[next.status]){v[next.status] = true;count_path(next);n[++tail] = next;}}head++;} }int main() {/* BFS-打表 */BFS();/*input*/char ch[3];Node cur;while (scanf("%s", ch) != EOF){if (!strcmp(ch, "x"))cur.s[0] = 0, cur.loc = 0;else cur.s[0] = ch[0] - '0';for (int i = 1; i < 9; i++){scanf("%s", ch);if (!strcmp(ch, "x"))cur.s[i] = 0, cur.loc = i;else cur.s[i] = ch[0] - '0';}cur.status = Inverse_cantor(cur.s);/*output*/if (v[cur.status])printf("%s\n", path[cur.status]);elseprintf("unsolvable\n");}return 0; }

還可以用A*好像
?

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的【 HDU1043-经典BFS+康拓展开 八数码】 (待更)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产欧美日韩激情 | xxxx视频在线 | 前任攻略在线观看免费完整版 | 无码aⅴ精品一区二区三区浪潮 | 久草免费av| 性史性农村dvd毛片 日韩精品在线视频观看 | 欧美 日韩 国产 高清 | 午夜亚洲AV永久无码精品蜜芽 | 九九精品在线视频 | 成人亚洲天堂 | 国产精品毛片久久久久久久 | 在线中文字日产幕 | 婷婷六月综合 | 另类激情亚洲 | 亚洲欧美一二三区 | 欧美国产一区二区 | 波多野吉衣毛片 | 操亚洲女人 | 欧美黑人一级爽快片淫片高清 | japan高清日本乱xxxxx | 亚洲a√ | 福利资源在线观看 | 久久久久青草 | 综合天天 | 一区二区欧美日韩 | 欧美成人第一页 | 久久精品无码毛片 | 蜜桃做爰免费网站 | 国产资源网 | 国产成人精品无码免费看在线 | 色爽爽爽爽爽爽爽爽 | 欧美无砖砖区免费 | 好吊日在线 | 欧美日韩亚洲国产一区 | 一级啪啪片 | av一二三区| 成人免费在线视频观看 | 五级 黄 色 片 | 亚洲视频高清 | 人禽高h交 | 日韩一区免费视频 | 樱空桃在线 | 中国妇女做爰视频 | 欧美视频一区二区三区 | 亚洲成人高清在线 | 免费a在线观看播放 | av亚州| 爱爱视频免费网站 | 一级片大片 | 亚洲精品综合在线 | 日韩精品二区在线观看 | 激情在线视频 | 亚洲免费成人在线 | 久久国产精品首页 | 久久偷看各类wc女厕嘘嘘偷窃 | 91精品久久久久久久久久入口 | 日韩精品激情 | 桃色视屏 | 日日嗨av一区二区三区四区 | 国产激情久久久 | 精品国产一区一区二区三亚瑟 | 91色拍| 中文文字幕一区二区三三 | 成人性做爰aaa片免费看不忠 | 毛片无限看 | 免费黄色一级视频 | 国产成人精品一区二区三区无码熬 | 爱爱小视频免费看 | 久草福利 | 三级在线视频 | 精品久久无码中文字幕 | 午夜不卡久久精品无码免费 | 成人精品影院 | 在线观看av大片 | 欧美13p| 国产一区二区黑人欧美xxxx | 女女h百合无遮涩涩漫画软件 | 欧美成人小视频 | 制中文字幕音影 | 男人操女人视频网站 | 久草影视网 | 激情综合网五月 | 亚洲欧美日韩精品永久在线 | 一本大道综合伊人精品热热 | 午夜小视频在线观看 | 久久久一区二区三区四区 | 黄色av观看| 成年人免费毛片 | 四虎在线观看视频 | 91蜜桃婷婷狠狠久久综合9色 | 久久久久久国产精品免费免费 | 91精品国产一区二区无码 | 国产色片| 欧美日韩网站 | 快色网站 | 午夜影音 | 国产亚洲制服欧洲高清一区 | 色导航在线 | 免费人成年激情视频在线观看 |