亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? a_star_8.c

?? 清華大學(xué)《人工智能導(dǎo)論》課程電子教案,給大家看看
?? C
?? 第 1 頁 / 共 2 頁
字號:
 ******************************************************/
{
	while (pList)	//依次打印鏈表
	{
		PrintNode(pList);
		pList = pList->pNext;
	}
}

void PrintPath(struct NODE *pNode) 
/******************************************************
 * 功能:在屏幕上打印解路徑。在搜索過程中,每個節(jié)點(diǎn)指 *
 *       向其父節(jié)點(diǎn),從目標(biāo)節(jié)點(diǎn)開始,遞歸打印各節(jié)點(diǎn), *
 *       既得到解路徑                                 *
 *                                                    *
 * 入口參數(shù):                                         *
 *   pGoal:指向求解得到的目標(biāo)節(jié)點(diǎn)                    *
 *                                                    *
 * 返回值:無                                         *
 ******************************************************/
{
	if (pNode == NULL) return;
	PrintPath(pNode->pFather);
	PrintNode(pNode);
}

int IsGrandFather(struct NODE *pNode, struct NODE *pFather)
/******************************************************
 * 功能:判斷一個節(jié)點(diǎn)是否與自己的祖父節(jié)點(diǎn)所表示的狀態(tài) *
 *       一樣                                         *
 *                                                    *
 * 入口參數(shù):                                         *
 *   pNode:指向給定節(jié)點(diǎn)的指針                        *
 *   pFather:指向給定節(jié)點(diǎn)的父節(jié)點(diǎn)的指針              *
 *                                                    *
 * 返回值:當(dāng)給定節(jié)點(diǎn)所表示的狀態(tài)與自己的祖父一樣時, *
 *         返回1,否則返回0                           *
 ******************************************************/
{
	if (pFather == NULL) return 0;
	if (pFather->pFather == NULL) return 0;
	return Equal(pNode, pFather->pFather);
}

int IsGoal(struct NODE *pNode)
/******************************************************
 * 功能:判斷給定節(jié)點(diǎn)是否為目標(biāo)節(jié)點(diǎn)                   *
 *                                                    *
 * 入口參數(shù):                                         *
 *   pNode:指向給定節(jié)點(diǎn)的指針                        *
 *                                                    *
 * 返回值:當(dāng)給定節(jié)點(diǎn)是目標(biāo)節(jié)點(diǎn)時,返回1,否則返回0   *
 ******************************************************/
{
	return Equal(pNode, &g_Goal);
}

int H_Function(struct NODE *pNode)
/******************************************************
 * 功能:計算給定節(jié)點(diǎn)的h值,h = 不在位的將牌數(shù)        *
 *                                                    *
 * 入口參數(shù):                                         *
 *   pNode:指向給定節(jié)點(diǎn)的指針                        *
 *                                                    *
 * 返回值:h值                                        *
 ******************************************************/
{
	int i, j, h = 0;
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			if (pNode->a[i][j] && (pNode->a[i][j] != g_Goal.a[i][j])) 
			{
				h++;
			}
		}
	}
	return h;
}

struct NODE *Move(struct NODE *pNode, int i1, int j1)
/******************************************************
 * 功能:[i1,j1]位置的將牌走到空格處,并產(chǎn)生一個新節(jié)點(diǎn)*
 *                                                    *
 * 入口參數(shù):                                         *
 *   pNode:指向原始節(jié)點(diǎn)的指針                        *
 *   i1, j1:給出走動的將牌的位置                     *
 *                                                    *
 * 返回值:返回新節(jié)點(diǎn)的指針,或者空間不夠時,返回NULL *
 ******************************************************/
{
	int i0, j0, i, j;
	struct NODE *pTempNode;

	pTempNode = malloc(sizeof(struct NODE));
	if (pTempNode == NULL) return NULL;	//申請不到空間

	//復(fù)制原始節(jié)點(diǎn)
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			pTempNode->a[i][j] = pNode->a[i][j];
		}
	}
	pTempNode->i0 = pNode->i0;
	pTempNode->j0 = pNode->j0;

	//移動將牌,并記錄空格所在的位置
	i0 = pTempNode->i0;
	j0 = pTempNode->j0;
	pTempNode->a[i0][j0] = pTempNode->a[i1][j1];
	pTempNode->a[i1][j1] = 0;
	pTempNode->i0 = i1;
	pTempNode->j0 = j1;
	
	return pTempNode;
}

struct NODE *Expand(struct NODE *pNode)
/******************************************************
 * 功能:生成指定節(jié)點(diǎn)的所有子節(jié)點(diǎn)                     *
 *                                                    *
 * 入口參數(shù):                                         *
 *   pNode:指向給定節(jié)點(diǎn)的指針                        *
 *                                                    *
 * 返回值:所有子節(jié)點(diǎn)形成的鏈表                       *
 ******************************************************/
{
	struct NODE *pSubNodeList = NULL, *m = NULL;
	int i, j, i1, j1;
	
	//以下兩重循環(huán),試探空格周圍上下左右四個位置的將牌,走到空格處的情況
	// 一次生成給定節(jié)點(diǎn)的所有子節(jié)點(diǎn)
	for (i = -1; i <= 1; i++)
	{
		for (j = -1; j <= 1; j++)
		{
			//排除一些非法的位置
			if (i == 0 && j == 0) continue;
			if (i != 0 && j != 0) continue;
			i1 = pNode->i0 + i;
			j1 = pNode->j0 + j;
			if (i1 < 0 || j1 < 0 || i1 > 2 || j1 > 2) continue;

			m = Move(pNode, i1, j1);	//產(chǎn)生下一個狀態(tài)m
				
			if (m == NULL) return NULL;	//空間不夠用,失敗退出
				
			if (IsGrandFather(m, pNode))//如果m與他的祖父狀態(tài)相同,或者是一個非法狀態(tài),則舍棄m
			{
				free(m);
				continue;
			}

			//對于節(jié)點(diǎn)m
			m->pFather = pNode;	//標(biāo)記其父節(jié)點(diǎn)為n
			m->g = pNode->g + 1;	//其g值為其父節(jié)點(diǎn)的g值加1
			m->f = m->g + H_Function(m);	//計算其f值,f = g+h

			m->pNext = pSubNodeList;	//將m加入到子節(jié)點(diǎn)鏈表中
			pSubNodeList = m;
		}
	}
	return pSubNodeList;
}

struct NODE *A_Star(struct NODE *s)
/******************************************************
 * 功能:A*算法主函數(shù)                                 *
 *                                                    *
 * 入口參數(shù):                                         *
 *   s:指向初始節(jié)點(diǎn)的指針                            *
 *                                                    *
 * 返回值:指向求解得到的目標(biāo)節(jié)點(diǎn)的指針,或者返回NULL *
 *         表示空間不夠用或者找不到問題的解           *
 ******************************************************/
{
	struct NODE *n = NULL, *m = NULL, *pNode = NULL, *pSubNodeList = NULL;

	g_pOpen = s;	//初始化OPEN表和CLOSED表
	g_pClosed = NULL;
	while (g_pOpen)	//OPEN表不空
	{
		n = g_pOpen;	//取出OPEN表的第一個元素n
		if (IsGoal(n)) return n;	//如果n為目標(biāo)節(jié)點(diǎn),則成功結(jié)束
		g_pOpen = g_pOpen->pNext;	//否則,從OPEN表中刪除n	
		g_pClosed = AddToClosed(n, g_pClosed);	//將n加入到CLOSED中

		pSubNodeList = Expand(n);	//擴(kuò)展節(jié)點(diǎn)n,得到其所有子節(jié)點(diǎn)

		while (pSubNodeList)
		{
			m = pSubNodeList;
			pSubNodeList = pSubNodeList->pNext;

			if (pNode = In(m, g_pOpen))	//如果m已經(jīng)出現(xiàn)在OPEN表中
			{
				if (m->f < pNode->f)	//如果m的f值小于OPEN表中相同狀態(tài)的f值
				{
					//則將該節(jié)點(diǎn)從OPEN表中刪除,并將m加入到OPEN表中。
					g_pOpen = AddToOpen(m, Del(pNode, g_pOpen));
					free(pNode);
				}
				else	//否則舍棄m
				{
					free(m);
				}
			}
			else if (pNode = In(m, g_pClosed))	//如果m已經(jīng)出現(xiàn)在CLOSED中
			{
				if (m->f < pNode->f)	//如果m的f值小于CLOSED表中相同狀態(tài)的f值
				{
					//則將該節(jié)點(diǎn)從CLOSED表中刪除,并重新添加到OPEN表中
					g_pClosed = Del(pNode, g_pClosed);
					g_pOpen = AddToOpen(m, g_pOpen);
					free(pNode);
				}
				else	//否則舍棄m節(jié)點(diǎn)
				{
					free(m);
				}
			}
			else	//其他情況,將m加入到OPEN表中
			{
				g_pOpen = AddToOpen(m, g_pOpen);
			}
		}
	}
	//如果OPEN表空了,還沒有找到目標(biāo)節(jié)點(diǎn),則搜索以失敗結(jié)束,
	//返回NULL
	return NULL;
}

void main(void)
{
	struct NODE *s;
	s = NewNode(2, 1, 6, 4, 0, 8, 7, 5, 3);	//設(shè)置初始節(jié)點(diǎn)
	s = A_Star(s);	//A*搜索
	if (s) PrintPath(s);	//如果找到問題的解,則輸出解路徑
	else printf("找不到問題的解!\n");
	FreeList(g_pOpen);	//釋放動態(tài)節(jié)點(diǎn)
	FreeList(g_pClosed);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
94色蜜桃网一区二区三区| 日韩综合一区二区| 91精品国产综合久久久久久| 国产美女视频一区| 亚洲香蕉伊在人在线观| 日韩欧美在线观看一区二区三区| 国产乱码精品一区二区三区av | 日韩国产一二三区| 欧美日韩色一区| 粗大黑人巨茎大战欧美成人| 日本一道高清亚洲日美韩| 一区二区三区在线不卡| 国产精品国产三级国产普通话蜜臀| 精品久久久久99| 日韩三级中文字幕| 777午夜精品视频在线播放| 欧美天天综合网| 91免费视频大全| 成人sese在线| 91亚洲精品一区二区乱码| 成人免费视频视频| 成人h动漫精品一区二| 国产毛片精品一区| 国产v综合v亚洲欧| 色综合久久综合| 91理论电影在线观看| 93久久精品日日躁夜夜躁欧美| 成人av电影观看| 国产一区二区调教| 99久久久精品| 日本黄色一区二区| 3d动漫精品啪啪一区二区竹菊| 欧美天堂亚洲电影院在线播放| 欧美日韩国产综合视频在线观看 | 亚洲三级在线看| 亚洲视频免费观看| 亚洲一级二级在线| 日韩av中文在线观看| 久88久久88久久久| 成人app网站| 91视频你懂的| 欧美精品丝袜中出| 久久美女艺术照精彩视频福利播放| 国产精品女上位| 亚洲va欧美va人人爽| 国产一区激情在线| 91麻豆自制传媒国产之光| 欧美精品自拍偷拍| 中文天堂在线一区| 同产精品九九九| 国产乱人伦偷精品视频免下载| av在线不卡免费看| 日韩午夜在线影院| 国产精品久久夜| 日日噜噜夜夜狠狠视频欧美人| 精品制服美女久久| 日本韩国欧美一区| 亚洲国产精品精华液2区45| 亚洲午夜精品久久久久久久久| 久久不见久久见免费视频7| 日韩中文字幕一区二区三区| 日韩精品一二三| 中文字幕av资源一区| 午夜电影一区二区三区| 国产成人啪午夜精品网站男同| 成人晚上爱看视频| 欧美日韩在线播| 最新不卡av在线| 久久国产精品色| 在线观看av一区| 国产精品福利一区二区三区| 日韩不卡一区二区三区 | 色悠悠久久综合| 精品国产髙清在线看国产毛片| 亚洲人妖av一区二区| 久久不见久久见免费视频1| 欧美日韩久久久一区| 国产精品不卡一区二区三区| 日韩电影一二三区| caoporn国产精品| 精品国产91洋老外米糕| 亚洲免费观看高清完整版在线观看 | 一本色道a无线码一区v| 久久综合九色综合97婷婷| 天天综合天天综合色| 色婷婷精品大在线视频| 国产精品高清亚洲| 国产精品羞羞答答xxdd| 日韩欧美电影一区| 日本中文字幕一区二区视频| 欧美精品vⅰdeose4hd| 亚洲成人资源网| 欧美三级欧美一级| 亚洲第一在线综合网站| 欧美视频中文字幕| 无码av中文一区二区三区桃花岛| 色婷婷综合久色| 亚洲综合丁香婷婷六月香| 在线一区二区视频| 日本一区二区免费在线观看视频 | 欧美成人精品福利| 久久99精品一区二区三区三区| 欧美日产国产精品| 亚洲mv大片欧洲mv大片精品| 色婷婷狠狠综合| 亚洲不卡一区二区三区| 正在播放一区二区| 国产精品一二三四五| 亚洲国产电影在线观看| 91影视在线播放| 亚洲一区免费观看| 欧美日韩国产大片| 久久福利视频一区二区| 国产欧美日韩精品一区| 国产一区欧美日韩| 一区二区三区在线观看国产| 视频一区中文字幕| 精品成人佐山爱一区二区| 粗大黑人巨茎大战欧美成人| 亚洲欧美色综合| 日韩一区二区三区四区五区六区| 国产麻豆视频一区二区| 亚洲欧美日韩国产另类专区| 91精品在线免费观看| 丁香婷婷深情五月亚洲| 一区二区三区中文字幕| 欧美在线免费观看亚洲| 国产美女在线精品| 亚洲影视资源网| 久久亚洲精华国产精华液| 在线免费不卡电影| 国产一区二区在线免费观看| 亚洲精品大片www| 欧美一卡2卡3卡4卡| 成人免费精品视频| 久久99精品久久久久久国产越南| 亚洲日本在线a| 亚洲精品在线免费观看视频| 色8久久精品久久久久久蜜| 亚洲国产成人av网| 欧美sm美女调教| 欧美在线视频日韩| 成人激情电影免费在线观看| 日本成人在线电影网| 一二三四区精品视频| 精品国内二区三区| 91福利精品视频| 国产风韵犹存在线视精品| 一区二区在线观看av| 亚洲国产精品成人综合色在线婷婷 | 欧美日韩高清影院| 99re8在线精品视频免费播放| 韩国av一区二区| 日韩精品视频网| 亚洲小少妇裸体bbw| 日韩美女精品在线| 精品1区2区在线观看| 91精品久久久久久久99蜜桃 | 国产大陆精品国产| 美女视频网站久久| 亚洲狼人国产精品| 久久婷婷久久一区二区三区| 在线不卡中文字幕播放| 岛国av在线一区| 国产传媒欧美日韩成人| 亚洲一区在线播放| 精品国产一区二区精华| 国产精品888| 国产一区二区毛片| 日韩精品一区二区三区中文精品| 91精品国产综合久久精品app| 日韩情涩欧美日韩视频| 国产欧美日韩综合精品一区二区| 中文字幕 久热精品 视频在线| 中文字幕日本乱码精品影院| 亚洲一卡二卡三卡四卡五卡| 美女视频一区二区| 成人黄页毛片网站| 9191久久久久久久久久久| 久久一区二区三区四区| 国产传媒一区在线| 欧美精品一区二区在线观看| 日韩片之四级片| 亚洲日本va午夜在线电影| 日韩精品一级二级| www.日韩大片| 在线播放日韩导航| 国产精品人成在线观看免费 | 欧美一级精品在线| 国产欧美日韩综合| 奇米综合一区二区三区精品视频| 国产精品主播直播| 欧美久久一二三四区| 国产欧美精品国产国产专区 | 国产成人免费9x9x人网站视频| 在线亚洲免费视频| 日本一区二区电影| 久久99精品久久久久婷婷| 欧美午夜精品久久久久久超碰| 久久久蜜桃精品|