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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

八数码(IDA*)

發布時間:2025/4/5 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 八数码(IDA*) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

IDA*+曼哈頓 相當快! 通過五組數據總計用時 0.015000 s.

把宏定義中的N和SIZE改一下,就可以處理十五數碼問題了,終于修煉到第八層了;

剛開始還是使用結構體定義了狀態,寫得相當麻煩,后來發現IDA*中不像BFS和A*,只需要考慮一條路,,參考了lym(http://www.cnblogs.com/liyongmou/archive/2010/07/19/1780861.html)的(后面調試的受不了了,對照著此大牛的代碼一點點改,最后發現是更新狀態時,npos寫成了pos……)

# include <stdio.h> # include <math.h> # include <string.h> # include <time.h># define MIN(x, y) ((x)<(y) ? (x):(y))# define N 9 # define DIR_N 4 # define INF 0x7fffffff # define MAX_DEPTH 1000 # define SIZE 3char solved; char start[N], goal[N]; char cur[N];int bound; const char md[] = {'u', 'l', 'r', 'd'}; const short int dir[][2] = {{-1,0}, {0,-1}, {0,1}, {1,0}}; char path[MAX_DEPTH];void move(void); void solve(void); char read(char *s); int IDAstar(void); char bool_inv(char *s); int heu(void); int dfs(int zero_pos, int depth, char direction); void print_state(char *s);int main() {freopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);while (read(start)){read(goal);memcpy(cur, start, N);solve();}printf("time cost %.6lf s.\n", (double)clock()/CLOCKS_PER_SEC);return 0; }void solve() {int i, depth;if (bool_inv(start) != bool_inv(goal)) puts("unsolvable");else{memset(path, -1, sizeof(path));depth = IDAstar();for (i = 0; path[i]!=-1; ++i){putchar(md[path[i]]);}printf(" %d\n", i);}//move(); //打印移動過程,調試的時候用的,加上這個總共用時31ms }char read(char *s) {char c[5];int i;if (EOF == scanf("%s", c)) return 0;else s[0] = (c[0]=='x' ? 0:c[0]-'0');for (i = 1; i < N; ++i){scanf("%s", c);s[i] = (c[0]=='x' ? 0:c[0]-'0');}return 1; }int IDAstar(void) {int i;solved = 0;bound = heu();for (i = 0; start[i] && i < N; ++i) ;while (!solved && bound<100){bound = dfs(i, 0, -10);}return bound; }int dfs(int pos, int depth, char d) {int h, i, nx, ny, npos, nbound, t;h = heu();if (depth+h > bound) return depth+h;if (h == 0){/* printf("depth = %d.\n", depth); */solved = 1;return depth;}nbound = INF;for (i = 0; i < DIR_N; ++i){if (i+d == DIR_N-1) continue;nx = pos/SIZE + dir[i][0];ny = pos%SIZE + dir[i][1];if (0<=nx && nx<SIZE && 0<=ny && ny<SIZE){path[depth] = i;npos = nx*SIZE + ny;cur[pos] = cur[npos]; cur[npos] = 0; /* 后來一直出錯就是這里的原因:pos -> npos */t = dfs(npos, depth+1, i);if (solved) return t;nbound = MIN(nbound, t);cur[npos] = cur[pos]; cur[pos] = 0;}}return nbound; }int heu(void) /* return heu(cur_state) */ {char ch;int i, j, ret;ret = 0;for (i = 0; i < N; ++i){ch = goal[i];if (ch == 0) continue;for (j = 0; j < N; ++j){if (ch == cur[j]){ret = ret + abs(i/SIZE-j/SIZE) + abs(i%SIZE-j%SIZE);}}}return ret; }char bool_inv(char *s) {char ch, ret;int i, j;ret = 0;for (i = 0; i < N-1; ++i){if ((ch = s[i]) == 0) continue;for (j = i+1; j < N; ++j){if (s[j] && s[j]<ch) ret = 1 - ret;}}return ret; }void move(void) {char ncur[N];int i, pos, nx, ny, npos;memcpy(ncur, start, N);print_state(ncur);for (i = 0; start[i] && i<N; ++i) ;pos = i;for (i = 0; path[i] != -1; ++i){nx = pos/SIZE + dir[path[i]][0];ny = pos%SIZE + dir[path[i]][1];npos = nx*SIZE + ny;ncur[pos] = ncur[npos]; ncur[npos] = 0;pos = npos;print_state(ncur);} }void print_state(char *s) {int i;for (i = 0; i < N; ++i){putchar(s[i]+'0');}putchar('\n'); }

//

轉載于:https://www.cnblogs.com/JMDWQ/archive/2012/05/27/2519728.html

總結

以上是生活随笔為你收集整理的八数码(IDA*)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 中文字幕乱码亚洲无线三区 | 伊人蕉久影院 | 日本香蕉视频 | 亚洲精品www久久久久久 | 我们俩电影网mp4动漫官网 | 吞精囗交69激情欧美 | 久久免费视频一区 | 国产精品福利在线观看 | 无码人妻精品一区二区三区不卡 | 免费观看黄色一级视频 | 日批视频免费在线观看 | 中文字幕 日韩 欧美 | 久久亚洲精品无码va白人极品 | 午夜影院在线观看免费 | 自拍偷拍21p | 中文字幕第十二页 | 中文字幕网站在线观看 | www.国产免费 | 91xxxxx| 日韩精品一区二区三区不卡在线 | 国产精品天天av精麻传媒 | 日本中文字幕二区 | 久久精品性 | 日韩大片免费观看视频播放 | mm1313亚洲国产精品无码试看 | 爱上av | 成人免费看高清电影在线观看 | 狠狠干一区二区 | av天天干| 青青福利视频 | 四虎精品在永久在线观看 | 无遮挡裸光屁屁打屁股男男 | 精品国产精品国产偷麻豆 | 国产成人精品女人久久久 | 快色视频在线观看 | 三级黄色小视频 | 岛国片免费在线观看 | 爱情岛亚洲首页论坛 | 久久久精品久久久 | 国产剧情av引诱维修工 | 蜜桃视频一区二区 | 超级乱淫视频 | 黄网站在线观 | 欧美性猛交乱大交xxxx | 青青青青操 | 成人第四色| 国产肉丝在线 | 一二三毛片 | 美女xx00 | 小萝莉末成年一区二区 | 手机版av | 免费搞黄网站 | 天天摸天天舔 | 国产不卡视频在线播放 | av香港经典三级级 在线 | 秋霞黄色片 | 欧美性受xxxx黑人xyx | 成人毛片一级 | 九色婷婷| 九九99精品视频 | 中国黄色在线视频 | 99这里只有精品视频 | 国产精品成久久久久三级 | 99精品国产一区二区 | 日韩免费二区 | 成人区视频| 欧色丰满女同hd | 国产又粗又长又爽 | 最新中文字幕在线 | 国产乱人对白 | 国产无 | 亚洲av无码国产综合专区 | 欧美视频一区二区在线观看 | 久久精品国产清自在天天线 | 欧美成人午夜剧场 | 成人ay | 国产精品毛片久久久久久 | 国产精品一区二区三区在线免费观看 | 四虎av影院 | 成人激情电影在线观看 | 精品国产一区二区三区四区精华 | 日韩电影在线观看一区 | 成人午夜精品一区二区三区 | 亲嘴扒胸摸屁股免费视频日本网站 | 欧美zzz物交 | 好吊色一区二区 | 伊人色综合久久久 | 岛国av免费在线 | 男女做爰真人视频直播 | 国产精品一线天粉嫩av | 亚洲wwww | 日韩大片免费在线观看 | 亚洲精品一区二区三区蜜桃 | 欧美亚洲在线观看 | 裸体一区二区 | av网站国产 | 日本黄色一级视频 | 美女考逼| 99久久亚洲精品日本无码 |