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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? a_star_8.c

?? 清華大學《人工智能導論》課程電子教案,給大家看看
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*********************************************************************************
 *          程  序  說  明                                                       *
 * 功能: 用A*算法求解8數碼問題                                                   *
 * 說明:                                                                         *
 *     本程序按照《人工智能導論》一書所介紹的A*算法求解8數碼問題。               *
 * 表示:用3*3矩陣表示8數碼的一個狀態,左上角位置為(0, 0), 右下角位置為(2, 2),   *
 *       1~8表示8個數碼,0表示空白位置。                                         *
 *                                                                               *
 * 注意: 該程序盡可能用與算法一致的思路實現算法, 力求簡單明了, 注重算法的清晰性,*
 * 而沒有考慮算法的效率問題。                                                    *
 *                                                                               *
 * 作者:馬少平                                                                  *
 * 單位:清華大學智能技術與系統國家重點實驗室                                    *
 * 時間:2004年8月15日                                                           *
*********************************************************************************/

#include <stdio.h>
#include <stdlib.h>

struct NODE
{
	char a[3][3];				//表示8數碼狀態的矩陣
	int i0;						//(i0,j0)表示0所在的位置
	int j0;						//
	double g;					//該節點的g值
	double f;					//該節點的f值
	struct NODE *pFather;		//指向該節點的父節點
	struct NODE *pNext;			//在OPEN表或者CLOSED表中,指向下一個元素
};

struct NODE *g_pOpen = NULL;	//全程變量,OPEN表
struct NODE *g_pClosed = NULL;	//全程變量,CLOSED表

struct NODE g_Goal = {{{1, 2, 3}, {8, 0, 4}, {7, 6, 5}}, 
                      1, 1, 0, 0, NULL, NULL};	//初始化一個目標節點

int Equal(struct NODE *pNode1, struct NODE *pNode2)
/******************************************************
 * 功能:判斷兩個節點所表示的狀態是否相等             *
 *                                                    *
 * 入口參數:                                         *
 *   pNode1:指向節點1的指針                          *
 *   pNode2:指向節點2的指針                          *
 *                                                    *
 * 返回值:當兩個節點所表示的狀態相等時,返回1,否則  *
 *         返回0                                      *
 ******************************************************/
{
	int i, j;
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			if (pNode1->a[i][j] != pNode2->a[i][j])
				return 0;
		}
	}
	return 1;
}

struct NODE *NewNode(int i00, int i01, int i02,
					 int i10, int i11, int i12,
					 int i20, int i21, int i22)
/******************************************************
 * 功能:動態產生一個節點                             *
 *                                                    *
 * 入口參數:                                         *
 *   i00~i22:給出8數碼問題的一個狀態,分別為狀態矩陣 *
 *            [0,0]~ [2,2]元素                        *
 *                                                    *
 * 返回值:指向新產生的節點的指針,或者空間不夠用時, *
 *         返回NULL                                   *
 ******************************************************/
{
	struct NODE *pNode = NULL;
	int i, j;
	int bEnd = 0;
	pNode = malloc(sizeof(struct NODE));

	if (pNode == NULL) return NULL;	//當申請不到空間時,返回NULL

	pNode->a[0][0] = i00;
	pNode->a[0][1] = i01;
	pNode->a[0][2] = i02;
	pNode->a[1][0] = i10;
	pNode->a[1][1] = i11;
	pNode->a[1][2] = i12;
	pNode->a[2][0] = i20;
	pNode->a[2][1] = i21;
	pNode->a[2][2] = i22;

	pNode->g = 0;
	pNode->f = 0;
	pNode->pFather = NULL;
	pNode->pNext = NULL;

	//找'0'所在的位置,并記錄
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			if (pNode->a[i][j] == 0)
			{
				pNode->i0 = i;
				pNode->j0 = j;
				bEnd = 1;
				break;
			}
		}
		if (bEnd) break;
	}

	return pNode;
}

void FreeList(struct NODE *pList)
/******************************************************
 * 功能:釋放動態產生的鏈表                           *
 *                                                    *
 * 入口參數:                                         *
 *   pList:指向OPEN表或者CLOSED表的指針              *
 *                                                    *
 * 返回值:無                                         *
 ******************************************************/
{
	struct NODE *pNode = NULL;
	while (pList)
	{
		pNode = pList;
		pList = pList->pNext;
		free(pNode);
	}
}

struct NODE *In(struct NODE *pNode, struct NODE *pList)
/******************************************************
 * 功能:判斷一個節點是否在一個鏈表中                 *
 *                                                    *
 * 入口參數:                                         *
 *   pNode:指向給定節點的指針                        *
 *   pList:指向給點鏈表的指針                        *
 *                                                    *
 * 返回值:當pNode在pList中時,返回以pNode為首的鏈表  *
 *         的后一部分;否則返回NULL                   *
 ******************************************************/
{
	if (pList == NULL) return NULL;
	if (Equal(pNode, pList)) return pList;
	return In(pNode, pList->pNext);
}

struct NODE *Del(struct NODE *pNode, struct NODE *pList)
/******************************************************
 * 功能:從鏈表pList中刪除節點pNode                   *
 *                                                    *
 * 入口參數:                                         *
 *   pNode:指向給定節點的指針                        *
 *   pList:指向給定的鏈表                            *
 *                                                    *
 * 返回值:刪除給定節點后的鏈表                       *
 ******************************************************/
{
	if (pList == NULL) return pList;
	if (Equal(pNode, pList)) return pList->pNext;
	pList->pNext = Del(pNode, pList->pNext);
	return pList;
}

struct NODE *AddToOpen(struct NODE *pNode, struct NODE *pOpen)
/******************************************************
 * 功能:將一個節點按照f值(從小到大)插入到OPEN表中  *
 *                                                    *
 * 入口參數:                                         *
 *   pNode: 指向給定節點的指針                        *
 *   pOpen:指向OPEN表的指針                          *
 *                                                    *
 * 返回值:指向插入給定節點后OPEN表的指針             *
 *                                                    *
 * 注意:同一個節點(具有相同指針的一個節點),只能向 *
 *       表中添加一次,否則可能會造成循環鏈表         *
 ******************************************************/
{
	if (pOpen == NULL)	//OPEN表為空
	{
		pNode -> pNext = NULL;
		return pNode;
	}
	if (pNode->f < pOpen->f)	//給定節點的f值小于OPEN表第一個節點的f值
	{
		pNode->pNext = pOpen;	//插入到OPEN的最前面
		return pNode;
	}
	pOpen->pNext = AddToOpen(pNode, pOpen->pNext);	//遞歸
	return pOpen;
}

struct NODE *AddToClosed(struct NODE *pNode, struct NODE *pClosed)
/******************************************************
 * 功能:將一個節點插入到CLOSED表中                   *
 *                                                    *
 * 入口參數:                                         *
 *   pNode: 指向給定節點的指針                        *
 *   pClosed:指向CLOSED表的指針                      *
 *                                                    *
 * 返回值:指向插入給定節點后CLOSED表的指針           *
 *                                                    *
 * 注意:同一個節點(具有相同指針的一個節點),只能向 *
 *       表中添加一次,否則可能會造成循環鏈表         *
 ******************************************************/
{
	pNode->pNext = pClosed;
	return pNode;
}

void PrintNode(struct NODE *pNode)
/******************************************************
 * 功能:在屏幕上打印一個節點,用于調試程序           *
 *                                                    *
 * 入口參數:                                         *
 *   pNode:指向節點的指針                            *
 *                                                    *
 * 返回值:無                                         *
 ******************************************************/
{
	int i, j;
	for (i = 0; i < 3; i++)
	{
		printf("|");
		for (j = 0; j < 3; j++)
		{
			printf(" %1d", pNode->a[i][j]);
		}
		printf(" |\n");
	}
	printf("(i0 = %d, j0 = %d, g = %f, f = %f)\n", 
		pNode->i0, pNode->j0, pNode->g, pNode->f);
}

void PrintList(struct NODE *pList)
/******************************************************
 * 功能:在屏幕上打印一個鏈表,用于調試程序           *
 *                                                    *
 * 入口參數:                                         *
 *   pList:指向鏈表的指針                            *
 *                                                    *
 * 返回值:無                                         *

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产东北露脸精品视频| 热久久国产精品| 国产农村妇女毛片精品久久麻豆 | www亚洲一区| 欧美日韩国产小视频| 欧美裸体bbwbbwbbw| 日韩视频中午一区| 欧美激情一二三区| 国产精品一色哟哟哟| 久久成人免费网站| 麻豆成人在线观看| 972aa.com艺术欧美| 51精品秘密在线观看| 中文字幕乱码日本亚洲一区二区 | 成人性生交大片免费看中文| 欧美在线免费观看视频| 精品欧美一区二区久久 | 欧美在线免费播放| 精品国产91亚洲一区二区三区婷婷| 国产精品私人自拍| 午夜激情一区二区三区| 国产一区二区成人久久免费影院 | 国产一区二区三区精品视频| 秋霞电影一区二区| 欧美日韩视频第一区| 日韩区在线观看| 日韩精品电影在线| 99久久国产综合精品麻豆| 欧美午夜精品一区二区三区| 一区二区成人在线| 日韩亚洲欧美一区| 91网上在线视频| 国产一区二区免费在线| 欧美三级资源在线| 中文字幕亚洲视频| 精品在线亚洲视频| 国产福利一区在线观看| 在线观看免费视频综合| 亚洲国产精品激情在线观看 | 国产精品美女一区二区| 丁香五精品蜜臀久久久久99网站| 亚洲国产精华液网站w| 日本午夜精品一区二区三区电影| www.久久精品| 久久精品一区二区三区不卡牛牛 | 色呦呦一区二区三区| 久久久久久久综合| 日本成人超碰在线观看| 国产精品一区二区久久不卡| 日本韩国欧美一区| 久久精品亚洲国产奇米99| 1000部国产精品成人观看| 狠狠色丁香久久婷婷综合丁香| 欧美日韩一区二区三区四区五区| 国产精品卡一卡二| 国产成人av网站| 26uuu另类欧美| 丝袜亚洲精品中文字幕一区| 色av一区二区| 亚洲欧美偷拍卡通变态| 99精品欧美一区二区三区综合在线| 国产欧美一区二区精品婷婷| 精品在线免费视频| 欧美成人性福生活免费看| 日本v片在线高清不卡在线观看| 欧美性受极品xxxx喷水| 亚洲免费在线电影| 日本电影亚洲天堂一区| 亚洲精品欧美综合四区| 欧美成人女星排行榜| 日本欧美在线观看| 日韩一区二区三区精品视频 | 日韩午夜小视频| 日本va欧美va精品| 91精品午夜视频| 日本午夜精品视频在线观看 | 喷水一区二区三区| 91精品啪在线观看国产60岁| 视频一区二区三区入口| 91麻豆精品国产91久久久资源速度 | 三级影片在线观看欧美日韩一区二区| 欧美主播一区二区三区| 亚洲成在线观看| 欧美日韩一区三区四区| 日韩经典一区二区| 日韩午夜激情av| 久久精品人人爽人人爽| 色综合久久综合网欧美综合网| 天天色天天爱天天射综合| 久久久99精品久久| 8v天堂国产在线一区二区| 成人美女视频在线看| 日本亚洲最大的色成网站www| 国产婷婷精品av在线| 制服丝袜在线91| 欧美午夜精品理论片a级按摩| 国产乱人伦偷精品视频免下载| 亚洲自拍偷拍九九九| 欧美极品美女视频| 精品蜜桃在线看| 欧美日本乱大交xxxxx| 99re这里只有精品首页| 激情偷乱视频一区二区三区| 免费人成精品欧美精品| 2021中文字幕一区亚洲| 精品国产一区二区三区不卡| 国内久久精品视频| 亚洲成av人片一区二区| 日日夜夜免费精品视频| 91丨九色丨蝌蚪富婆spa| 欧美一激情一区二区三区| 国产精品不卡在线观看| 欧美在线观看一区| 麻豆91在线看| 国产精品视频一二三区| 欧美亚洲一区二区三区四区| 免费看欧美女人艹b| 欧美国产精品专区| 欧美老肥妇做.爰bbww视频| 九九久久精品视频| 一区视频在线播放| 日韩精品免费视频人成| 亚洲午夜在线视频| 亚洲一级二级在线| 日韩电影免费在线| 精品午夜久久福利影院| 成人网在线免费视频| 在线日韩一区二区| 色婷婷久久久久swag精品| 欧美日韩亚洲不卡| 欧美va在线播放| 久久人人97超碰com| 国产精品不卡在线| 精久久久久久久久久久| 久久久久国产成人精品亚洲午夜| 日本中文在线一区| 日本精品一区二区三区四区的功能| 秋霞影院一区二区| 亚洲日本乱码在线观看| 精品国产不卡一区二区三区| 在线精品国精品国产尤物884a| 国产麻豆日韩欧美久久| 五月综合激情网| 亚洲日本在线a| 久久久久9999亚洲精品| 欧美日韩在线一区二区| 成人av一区二区三区| 精品系列免费在线观看| 亚洲成av人片www| 亚洲天堂久久久久久久| 久久久久97国产精华液好用吗| 7777精品伊人久久久大香线蕉最新版| 99re视频精品| 国产精品综合在线视频| 免费观看成人av| 亚洲高清久久久| 亚洲男帅同性gay1069| 国产三级欧美三级| 欧美va在线播放| 91麻豆精品国产| 欧美日本在线播放| 91黄色小视频| 99在线精品免费| 成人白浆超碰人人人人| 国内精品国产成人国产三级粉色| 日韩av在线播放中文字幕| 亚洲一区二区三区小说| 亚洲欧美日韩在线| 亚洲图片你懂的| 国产精品三级在线观看| 久久精品视频一区二区三区| 精品理论电影在线| 91精品国产综合久久婷婷香蕉| 欧美日韩精品三区| 欧美吻胸吃奶大尺度电影 | 欧美高清视频一二三区| 色欧美片视频在线观看在线视频| www.亚洲免费av| 成人精品一区二区三区四区 | 国产精品久久久久aaaa樱花| 中文字幕成人网| 国产精品免费av| 中文字幕一区日韩精品欧美| 国产精品第五页| 国产精品乱人伦| 国产精品乱人伦| 亚洲美女视频在线| 伊人性伊人情综合网| 成人免费高清视频在线观看| 国产欧美日韩视频一区二区| 菠萝蜜视频在线观看一区| 自拍偷拍亚洲激情| 欧美日韩精品一区二区天天拍小说| 亚洲美腿欧美偷拍| 国产调教视频一区| 91高清视频在线| 美女精品一区二区| 久久精品人人做| 欧美精品在线观看播放| 国产一区二区三区观看|