《人工智能-启发式算法》由会员分享,可在线阅读,更多相关《人工智能-启发式算法(11页珍藏版)》请在金锄头文库上搜索。
1、人工智能人工智能- -启发式算法启发式算法#include#include#include#define SIZE 10000int start33=0;int end33=0;struct node int index;/结点序号int p_index;/父结点序号 int matrix33;/ 八数码状态int h_function;/启发式函数值;node openSIZE; /存放已经生成的未考察的节点int openlength=0;int openlast=0;/open 表最后一个数据的位置node closedSIZE; /存放已经考察过得节点int closedlength=
2、0;int closedlast=0;/closed 表最后一个数据的位置int fail=0;/失败标记,fail=1 则搜索失败int n_index=0;/节点标记序号int extend33=0;int n_root=0;struct Rootnode resultRootSIZE;int length;void init(Root ;void read()printf(“输入初始节点:n“);int i,j;for(i=0;i0;i-)for(j=0;jopenj+1.h_function)exchangeNode(j,j+1);int seekfather(node a)int i
3、;for(i=0;i0)/空格上移int *p=int *q=exchange(p,q);if(judge()inopen(extend);copy_matrix(extend,now);if(i0)/空格左移exchange(if(judge()inopen(extend);copy_matrix(extend,now);if(j10000)fail=1;return;adjust();sort();void print_matrix(int a3)int i,j;for(i=0;i=0;j-)print_matrix(result.resultRootj.matrix);printf(“共
4、扩展%d 步,步数为%dn“,closedlast,n_root);int countContray(int a3)int num=0;int i,j;int i1,i2,j1,j2;for(i=1;i9;i+)i1=i/3;i2=i%3;for(j=0;ji;j+)j1=j/3;j2=j%3;if(ai1i2!=0return num;int canSolve()int n_start,n_end;n_sta n_end=countContray(end);if(n_start%2=n_end%2)return 1;elsereturn 0; int main()read();if(!canSolve()printf(“该输入不可解!n“);elseclock_t start_t,finish_t;start_t=clock();search();if(!fail)print(start_t,finish_t);elseprintf(“search fail!n“);printf(“按任意键结束.“);getchar();getchar();return 0;