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

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

?? ai.c

?? 題目:設(shè)有n個傳教士和m個野人來到河邊
?? C
字號:
#include <stdio.h>
#include <stdlib.h>
#define maxloop 100    //最大層數(shù),對于不同的擴展方法自動調(diào)整取值#define pristnum 3#define slavenum 3struct SPQ{	int sr,pr;             //船運行一個來回后河右岸的野人、傳教士的人數(shù) 	int sl,pl;             //船運行一個來回后河左岸的野人、傳教士的人數(shù) 	int ssr,spr;           //回來(由左向右時)船上的人數(shù)	int sst,spt;           //去時(由右向左時)船上的人數(shù)	int loop;               //本結(jié)點所在的層數(shù)                 	struct SPQ *upnode ,*nextnode;//本結(jié)點的父結(jié)點和同層的下一個結(jié)點的地址}spq;  int loopnum;//記錄總的擴展次數(shù)int openednum;//記錄已擴展節(jié)點個數(shù)int unopenednum;//記錄待擴展節(jié)點個數(shù)int resultnum;struct SPQ *opened;struct SPQ *oend;struct SPQ *unopened;          struct SPQ *uend;struct SPQ *result;void initiate();
void releasemem();void showresult();void addtoopened(struct SPQ *ntx);int search();
void goon();int stretch(struct SPQ* ntx);
void recorder();void main(){	int flag;       //標記擴展是否成功	
	for( ; ; )	{		initiate();		flag = search ();		if(flag == 1)		{			recorder();			releasemem();			showresult();
			goon();		}		else		{			printf("無法找到符合條件的解");
			releasemem();			goon();
		}	}}void initiate(){	int x;
	char choice;
	uend = unopened = (struct SPQ*)malloc(sizeof(spq));	if(uend==NULL)
	{
		printf("\n內(nèi)存不夠!\n");
		exit(0);
	}	unopenednum=1;	openednum=0;	unopened -> upnode = unopened;       //保存父結(jié)點的地址以成鏈表	unopened -> nextnode = unopened;	unopened -> sr = slavenum;	unopened -> pr = pristnum;	unopened -> sl = 0;	unopened -> pl = 0;	unopened -> sst = 0;	unopened -> spt = 0;	unopened -> ssr = 0;	unopened -> spr = 0;	unopened -> loop = 0;	printf("題目:設(shè)有n個傳教士和m個野人來到河邊,打算乘一只船從右岸到左岸去。\n");
	printf("該船的負載能力為兩人。在任何時候,如果野人人數(shù)超過傳教士人數(shù),野人\n");
	printf("就會把傳教士吃掉。他們怎樣才能用這條船安全的把所有人都渡過河去?\n");
	printf("\n默認的n、m值皆為3\n");
    for(;;)
	{
		printf("\n是否修改?(Y/N)");
		scanf("%s",&choice);
		choice=toupper(choice);
		if(choice=='Y')
		{			
			printf("\n請輸入傳教士人數(shù)");
			for(;;)
			{
				scanf("%d",&x);
				if(x>0)	
				{
					unopened -> pr = x;
					break;
				}
				else printf("\n輸入值應(yīng)大于0!\n請重新輸入");
			}
			printf("\n請輸入野人人數(shù)");
			for(;;)
			{
				scanf("%d",&x);
				if(x>0)
				{
					unopened -> sr = x;
					break;
				}
				else printf("\n輸入值應(yīng)大于0!\n請重新輸入");
			}	
			break;
		}
		if(choice=='N')break;
	}	}int search(){	int flag;	struct SPQ *ntx;               //提供將要擴展的結(jié)點的指針	for( ; ; )	{		ntx = unopened;        //從待擴展鏈表中提取最前面的一個		if(ntx->loop == maxloop)			return 0; 		addtoopened(ntx);       //將ntx加入已擴展鏈表,并將這個節(jié)點從待擴展鏈表中去掉
		flag = stretch(ntx);    //對ntx進行擴展,返回-1,0,1		if(flag == 1)			return 1; 			}}int stretch(struct SPQ *ntx){	int fsr , fpr ; //在右岸上的人數(shù)	int fsl , fpl ; //在左岸上的人數(shù)	int	sst , spt ; //出發(fā)時在船上的人數(shù)	int ssr , spr ; //返回時船上的人數(shù)	struct SPQ *newnode;	for (sst = 0 ; sst <=  2 ; sst++) //討論不同的可能性并判斷是否符合條件	{		fsr = ntx -> sr;		fpr = ntx -> pr;		fsl = ntx -> sl;		fpl = ntx -> pl;		if ((sst <=  fsr) && (( 2 - sst) <=  fpr))//滿足人數(shù)限制		{			spt = 2 - sst;			fsr = fsr - sst;			fpr = fpr - spt;			if((fpr ==  0) && (fsr ==  0))//搜索成功			{ 				newnode = (struct SPQ*) malloc (sizeof(spq));
				if(newnode==NULL)
				{
					printf("\n內(nèi)存不夠!\n");
					exit(0);
				}				newnode -> upnode = ntx;       //保存父結(jié)點的地址以成鏈表				newnode -> nextnode = NULL;				newnode -> sr = 0;				newnode -> pr = 0;				newnode -> sl = opened -> sr;				newnode -> pl = opened -> pr;				newnode -> sst = sst;				newnode -> spt = spt;				newnode -> ssr = 0;				newnode -> spr = 0;				newnode -> loop = ntx -> loop + 1;				oend -> nextnode = newnode;				oend = newnode;				openednum++;				return 1;			}   			else if ((fpr - fsr) * fpr >= 0) //判斷是否滿足傳教士人數(shù)必須大于或等于野人人數(shù)			{				fsl = fsl + sst;				fpl = fpl + spt;				for (ssr = 0 ; ssr <= 1 ; ssr++)                  //返回				{					int ffsl , ffpl;					if ((ssr <= fsl) && ((1 - ssr) <= fpl))					{						spr = 1 - ssr;						ffsl = fsl - ssr;						ffpl = fpl - spr;						if ((ffpl - ffsl) * ffpl >= 0)						{	//若符合條件則分配內(nèi)存并付值								int  ffsr , ffpr;							ffsr = fsr + ssr;							ffpr = fpr + spr;							                        							newnode = (struct SPQ*) malloc (sizeof(spq));
							if(newnode==NULL)
							{
								printf("\n內(nèi)存不夠!\n");
								exit(0);
							}							newnode -> upnode = ntx;       //保存父結(jié)點的地址以成鏈表							newnode -> sr = ffsr;							newnode -> pr = ffpr;							newnode -> sl = ffsl;							newnode -> pl = ffpl;							newnode -> sst = sst;							newnode -> spt = spt;							newnode -> ssr = ssr;							newnode -> spr = spr;							newnode -> loop = ntx -> loop + 1;							uend -> nextnode = newnode;							uend = newnode;							unopenednum++;																					}					}				}			}		}	} 	return 0;}void addtoopened(struct SPQ *ntx){	unopened = unopened -> nextnode;
	unopenednum--;
	if (openednum == 0 )		oend = opened = ntx;	oend -> nextnode = ntx;	oend = ntx;	openednum++;}void recorder(){	int i , loop;
	struct SPQ *newnode;
	struct SPQ *ntx;
	loop = oend -> loop;
	ntx = oend;	resultnum = 0;	for( i = 0 ; i <= loop ; i++ )	{		newnode = (struct SPQ*) malloc (sizeof(spq));
		if(newnode==NULL)
		{
			printf("\n內(nèi)存不夠!\n");
			exit(0);
		}		newnode -> sr = ntx -> sr;		newnode -> pr = ntx -> pr;		newnode -> sl = ntx -> sl;		newnode -> pl = ntx -> pl;		newnode -> sst = ntx -> sst;		newnode -> spt = ntx -> spt;		newnode -> ssr = ntx -> ssr;		newnode -> spr = ntx -> spr;
		newnode -> nextnode = NULL;		ntx = ntx -> upnode;						if(i == 0)			result = newnode;		newnode -> nextnode = result;		result = newnode;		resultnum++;	}}void releasemem(){	int i;	struct SPQ* nodefree;	for ( i = 1 ; i < openednum ; i++ )	{		nodefree = opened;		opened = opened -> nextnode;		free(nodefree);	}	for ( i = 0 ; i < unopenednum ; i++ )	{		nodefree = unopened;		unopened = unopened -> nextnode;		free(nodefree);	}}void showresult(){	int i;
    int fsr , fpr ; //在右岸上的人數(shù)
	int fsl , fpl ; //在左岸上的人數(shù)
	struct SPQ* nodefree;
	printf("%d個傳教士",result -> pr);
	printf("%d個野人",result -> sr);    printf("%d個傳教士",result -> pl);
    printf("%d個野人",result -> sl);	for ( i = 1 ; i < resultnum ; i++ )	{		nodefree = result;		result = result -> nextnode;		free(nodefree);		printf("\n\n\t左岸人數(shù) 船上人數(shù)及方向 右岸人數(shù)\n");
		printf("第%d輪\n",i);
		fpl = result -> pl - result -> spt + result -> spr;
		fpr = result -> pr - result -> spr;
		fsl = result -> sl - result -> sst + result -> ssr;
        fsr = result -> sr - result -> ssr;
		printf("傳教士%8d%8d\t<-\t%8d\n",fpl,result -> spt,fpr);
		printf("野  人%8d%8d\t<-\t%8d\n",fsl,result -> sst,fsr);
		printf("傳教士%8d%8d\t->\t%8d\n",result -> pl,result -> spr,result -> pr - result -> spr);
		printf("野  人%8d%8d\t->\t%8d\n",result -> sl,result -> ssr,result -> sr - result -> ssr);
	}	printf("\n全體傳教士和野人全部到達對岸");	free(result);
}void goon()
{
	char choice;
	for(;;)
	{
		printf("是否繼續(xù)?(Y/N)\n");
	    scanf ("%s" , &choice);
		choice=toupper(choice);
		if(choice=='Y')break;
		if(choice=='N')exit(0);
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久久久快鸭 | 久久精品一区二区三区不卡牛牛| 国产精品亚洲一区二区三区在线| 亚洲精品国产a久久久久久| 欧美一区二区三区在| 99在线热播精品免费| 免费日韩伦理电影| 亚洲午夜日本在线观看| 国产精品亲子乱子伦xxxx裸| 日韩一区二区电影网| 一本色道久久综合精品竹菊| 国产一区亚洲一区| 日韩不卡在线观看日韩不卡视频| 国产精品激情偷乱一区二区∴| 欧美xxxxxxxx| 欧美一区二区私人影院日本| 色综合欧美在线| 成人一二三区视频| 国模冰冰炮一区二区| 91激情五月电影| jizz一区二区| 国产一区三区三区| 久久国内精品自在自线400部| 一区二区三区在线看| 中文字幕av一区二区三区免费看| 精品国产一区二区三区久久久蜜月 | 不卡视频在线看| 国产在线不卡一区| 精品一区二区三区免费观看| 日韩国产欧美视频| 午夜一区二区三区在线观看| 有码一区二区三区| 亚洲欧美激情插| 亚洲欧洲韩国日本视频| 亚洲欧洲日韩在线| 中文字幕日韩一区| 亚洲男人的天堂在线aⅴ视频 | 综合在线观看色| 中文久久乱码一区二区| 日本一区二区三区dvd视频在线| 久久综合九色综合97婷婷女人 | 肉色丝袜一区二区| 国产亚洲一区二区在线观看| 97精品视频在线观看自产线路二| 成人永久aaa| 中文字幕永久在线不卡| 夜夜嗨av一区二区三区| 高清成人在线观看| 国产精品第四页| 免费在线观看精品| 美女网站色91| 一区二区三区美女视频| 国产精品视频在线看| 亚洲精品午夜久久久| 免费在线欧美视频| 免费美女久久99| 一区二区欧美国产| 国产传媒欧美日韩成人| 精品伊人久久久久7777人| 一级女性全黄久久生活片免费| 91精品国产一区二区| 99re热这里只有精品视频| 久久精品国产一区二区三| 一区二区三区精品| 中文字幕 久热精品 视频在线| 综合久久久久综合| 夜夜嗨av一区二区三区| 奇米综合一区二区三区精品视频| 亚洲一区二区三区四区在线免费观看 | 欧美日韩在线综合| 国产精品一区二区果冻传媒| 蜜桃久久久久久| 亚洲成人久久影院| 国产精品美女www爽爽爽| 欧美国产激情一区二区三区蜜月 | 久久se这里有精品| 国产精品免费人成网站| 中文字幕日韩精品一区| 国产欧美日韩三级| 国产日韩三级在线| 日韩欧美色综合网站| 欧美妇女性影城| 久久久久久久久久久久久久久99| 欧美一级在线视频| 亚洲国产成人私人影院tom| 日韩中文字幕亚洲一区二区va在线| 久久久亚洲国产美女国产盗摄 | 国产女主播在线一区二区| 91免费看`日韩一区二区| 国产精品99久久久久久久女警 | 久久久久久亚洲综合影院红桃| 久久看人人爽人人| 亚洲欧洲精品一区二区精品久久久 | 欧美日韩免费视频| 精品久久久久99| 亚洲三级在线观看| 免费人成黄页网站在线一区二区| 蜜桃精品视频在线| av电影在线不卡| 欧美日韩国产在线观看| 国产欧美日韩三级| 蜜臀久久久久久久| 成人国产精品免费观看| 欧美喷水一区二区| 欧美国产亚洲另类动漫| 亚洲永久免费视频| 国产精品 欧美精品| 欧美日韩一区二区三区高清| 久久久精品黄色| 亚洲精品国产精品乱码不99 | 91精品国产一区二区| 国产精品国产a| 免费成人在线网站| 91浏览器入口在线观看| 久久欧美中文字幕| 亚洲大片精品永久免费| 一本大道久久精品懂色aⅴ| 精品国精品国产| 高清国产一区二区| 91精品国产入口| 亚洲精品自拍动漫在线| 国产成人精品aa毛片| 欧美一区二区三区小说| 国产精品国产自产拍高清av王其| 经典三级一区二区| 欧美调教femdomvk| 中文字幕欧美三区| 国产精品资源网| 欧美一级理论片| 亚洲电影一级黄| 成人黄色大片在线观看| 国产精品视频在线看| 国产精品综合久久| 欧美大胆一级视频| 男男成人高潮片免费网站| 欧美日韩成人激情| 亚洲综合区在线| 欧美午夜精品一区| 亚洲另类在线一区| 成人免费毛片片v| 久久精品一区四区| 国产成人综合在线| 久久久激情视频| 国产揄拍国内精品对白| 欧美成人女星排行榜| 午夜不卡在线视频| 日韩免费电影网站| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美电影一区二区| 色狠狠av一区二区三区| 亚洲天堂网中文字| 一本高清dvd不卡在线观看| 一区二区高清在线| 在线观看91精品国产入口| 一区二区三区在线视频免费| 色婷婷狠狠综合| 亚洲宅男天堂在线观看无病毒| 91麻豆精品秘密| 亚洲综合在线五月| 在线不卡免费欧美| 免费观看在线色综合| 久久夜色精品国产噜噜av| 国产一区二区电影| 中文字幕精品一区二区精品绿巨人 | 久久69国产一区二区蜜臀| 日韩一区二区三区视频| 久久精品国产一区二区三| 久久综合九色欧美综合狠狠| 国产精品自在在线| 国产精品嫩草影院com| 99精品视频在线免费观看| 综合电影一区二区三区| 色综合久久久网| 丝袜亚洲另类丝袜在线| ww久久中文字幕| 国产精品99久久久久久久vr| 国产精品久久久久久久久搜平片| 91免费在线视频观看| 日韩中文字幕区一区有砖一区 | 亚洲天堂2016| 精品污污网站免费看| 免费观看在线综合色| 日本一区二区三区久久久久久久久不 | 欧美日韩国产高清一区二区| 蜜臀久久99精品久久久画质超高清| 亚洲精品一线二线三线无人区| 国产成人日日夜夜| 亚洲大片精品永久免费| 91精品国产麻豆国产自产在线| 国产成人av自拍| 亚洲第四色夜色| 久久久99免费| 欧美午夜精品理论片a级按摩| 精品在线观看视频| 一区二区在线看| 中文字幕av不卡| 7777精品久久久大香线蕉| 国产suv精品一区二区6| 午夜视频在线观看一区二区三区| 久久精品视频在线看|