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

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

?? 修道士與野人1.9.cpp

?? 用C++實現傳教士與野人問題
?? CPP
字號:
#include<iostream>
using namespace std;
const int maxvertices=1000;
int n;//野人或修道士的人數
int c;//小船上面最多可以容納的人數
int x=1,y;
int result[30000][100];
//鄰接邊單鏈表的結點結構體
struct node
{
	int dest;
	node *next;
};
//數組的數據元素類型結構體
struct adjlheight
{
	int x[3];//0表示修道士,1表示野人,2表示船的狀態
	int sorce;
	node *adj;
};
//鄰接表結構體
struct adjlgraph
{
	adjlheight a[maxvertices];
	int numofverts;
	int numofedges;
};


//函數聲明
adjinitiate(adjlgraph *g,int n,int c);//初始化
insertvertex(adjlgraph *g,int i,int x[3]);//插入結點操作
insertedge(adjlgraph *g,int v1,int v2);//插入邊操作 加入邊 <v1,v2> 的信息
deleteedge(adjlgraph *g,int v1,int v2);//刪除邊操作
int getfirstvex(adjlgraph g,int v);//取第一個鄰接結點
int getnextvex(adjlgraph g,int v1,const int v2);//取下一個鄰接結點
bfs(adjlgraph g,int vi);//廣度優先
void dfs(adjlgraph g,int v);//深度優先





//初始化
adjinitiate(adjlgraph *g,int n,int c)
{
	int i,ci,vcount,cx,cy,vctemp,vc2;
	int boatrl;//左為1,右為0
	adjlheight temph;

	g->numofverts=0;
	g->numofedges=0;
	for(i=0;i<maxvertices;i++)
	{
		g->a[i].sorce=i;
		g->a[i].adj=NULL;
	}
	for(boatrl=1;boatrl>=0;boatrl--)
	{
		for(ci=n;ci>=0;ci--)
		{
			temph.x[0]=ci;
			temph.x[1]=ci;
			temph.x[2]=boatrl;
			insertvertex(g,g->numofverts,temph.x);
			if(ci!=n)
			{
				temph.x[0]=n;
				temph.x[1]=ci;
				temph.x[2]=boatrl;
				insertvertex(g,g->numofverts,temph.x);
			}
			if(ci==0)
			{
				for(int zzz=1;zzz<=n;zzz++)
				{
					temph.x[0]=0;
					temph.x[1]=zzz;
					temph.x[2]=boatrl;
					insertvertex(g,g->numofverts,temph.x);
				}
			}
		}
	}
	for(vcount=0;vcount<g->numofverts;vcount++)
	{
		for(cx=0;cx<=c;cx++)
		{
			for(cy=0;cy+cx<=c;cy++)
			{
				//左右
				if(g->a[vcount].x[2]==1&&(cy+cx)>0)
				{
					temph.x[0]=g->a[vcount].x[0]-cx;
					temph.x[1]=g->a[vcount].x[1]-cy;
					temph.x[2]=0;
					if(temph.x[0]==temph.x[1]&&temph.x[0]>=0&&temph.x[0]<=n)
					{
						vctemp=0;
						while(temph.x[0]!=g->a[vctemp].x[0] || temph.x[1]!=g->a[vctemp].x[1] || temph.x[2]!=g->a[vctemp].x[2])
						{
							vctemp++;
						}
						vc2=vctemp;
						insertedge(g,vcount,vc2);
					}
					if(temph.x[0]==n&&temph.x[1]<n&&temph.x[1]>=0)
					{
						vctemp=0;
						while(temph.x[0]!=g->a[vctemp].x[0] || temph.x[1]!=g->a[vctemp].x[1] || temph.x[2]!=g->a[vctemp].x[2])
						{
							vctemp++;
						}
						vc2=vctemp;
						insertedge(g,vcount,vc2);
					}
					if(temph.x[0]==0&&temph.x[1]<=n&&temph.x[1]>0)
					{
						vctemp=0;
						while(temph.x[0]!=g->a[vctemp].x[0] || temph.x[1]!=g->a[vctemp].x[1] || temph.x[2]!=g->a[vctemp].x[2])
						{
							vctemp++;
						}
						vc2=vctemp;
						insertedge(g,vcount,vc2);
					}
				}
				//右左
				if(g->a[vcount].x[2]==0&&(cx+cy)>0)
				{
					temph.x[0]=g->a[vcount].x[0]+cx;
					temph.x[1]=g->a[vcount].x[1]+cy;
					temph.x[2]=1;
					if(temph.x[0]==temph.x[1]&&temph.x[0]>=0&&temph.x[0]<=n)
					{
						vctemp=0;
						while(temph.x[0]!=g->a[vctemp].x[0] || temph.x[1]!=g->a[vctemp].x[1] || temph.x[2]!=g->a[vctemp].x[2])
						{
							vctemp++;
						}
						vc2=vctemp;
						insertedge(g,vcount,vc2);
					}
					if(temph.x[0]==n&&temph.x[1]<n&&temph.x[1]>=0)
					{
						vctemp=0;
						while(temph.x[0]!=g->a[vctemp].x[0] || temph.x[1]!=g->a[vctemp].x[1] || temph.x[2]!=g->a[vctemp].x[2])
						{
							vctemp++;
						}
						vc2=vctemp;
						insertedge(g,vcount,vc2);
					}
					if(temph.x[0]==0&&temph.x[1]<=n&&temph.x[1]>0)
					{
						vctemp=0;
						while(temph.x[0]!=g->a[vctemp].x[0] || temph.x[1]!=g->a[vctemp].x[1] || temph.x[2]!=g->a[vctemp].x[2])
						{
							vctemp++;
						}
						vc2=vctemp;
						insertedge(g,vcount,vc2);
					}
				}				
			}
		}
	}
	return 0;
}


//插入結點操作
insertvertex(adjlgraph *g,int i,int x[3])
{
	if(i>=0&&i<maxvertices)
	{
		for(int three=0;three<3;three++)
		{
			g->a[i].x[three]=x[three];
		}
		g->numofverts++;
	}
	else
		cout<<"結點越界.";
	return 0;
}


//插入邊操作 加入邊 <v1,v2> 的信息
insertedge(adjlgraph *g,int v1,int v2)
{
	node *p;

	if(v1<0||v1>=g->numofverts||v2<0||v2>=g->numofverts)
	{
		cout<<"參數v1或v2越界出錯.";
		exit(0);
	}

	p=(node *)malloc(sizeof(node));
	p->dest=v2;

	p->next=g->a[v1].adj;
	g->a[v1].adj=p;
	g->numofedges++;

	return 0;
}


//刪除邊操作
deleteedge(adjlgraph *g,int v1,int v2)
{
	node *curr,*pre;

	if(v1<0||v1>=g->numofverts||v2<0||v2>=g->numofverts)
	{
		cout<<"參數越界出錯.";
		exit(0);
	}
	pre=NULL;
	curr=g->a[v1].adj;
	while(curr!=NULL && curr->dest!=v2)
	{
		pre=curr;
		curr=curr->next;
	}


	if(curr!=NULL && curr->dest==v2 && pre==NULL)
	{
		g->a[v1].adj=curr->next;
		free(curr);
		g->numofedges--;
	}

	else if(curr!=NULL&&curr->dest==v2&&pre!=NULL)
	{
		pre->next=curr->next;
		free(curr);
		g->numofedges--;
	}
	else
		cout<<"邊<v1,v2>不存在!";

	return 0;
}

//取第一個鄰接結點
//成功返回對應序號,否則返回-1
int getfirstvex(adjlgraph g,int v)
{
	node *p;

	if(v<0||v>g.numofverts)
	{
		cout<<"參數出錯.";
		exit(0);
	}

	p=g.a[v].adj;
	if(p!=NULL)
		return p->dest;
	else
		return -1;
}

//取下一個鄰接結點
int getnextvex(adjlgraph g,int v1,const int v2)
{
	node *p;

	if(v1<0||v1>g.numofverts||v2<0||v2>g.numofverts)
	{
		cout<<"參數出錯.";
		exit(0);
	}

	p=g.a[v1].adj;
	while(p!=NULL)
	{
		if(p->dest!=v2)
		{
			p=p->next;
			continue;
		}
		else 
			break;
	}


	p=p->next;
	if(p!=NULL)
		return p->dest;
	else 
		return -1;
}

int visited[maxvertices];
int queue[maxvertices];
int terminal[maxvertices];
int teri=1;

//深度優先
void dfs(adjlgraph g,int v)
{
	int w;
	;
	visited[v]=1;
	terminal[teri]=v;
	
	if(g.a[v].x[0]==0&&g.a[v].x[1]==0&&g.a[v].x[2]==0)
	{
		for(y=1;y<=teri;y++)
		{
			result[x][y]=terminal[y];
		}
		x++;
        visited[terminal[teri]]=0;
		teri++;
	}
	else
	{
		teri++;
		w=getfirstvex(g,v);
		while(w!=-1)
		{
			if(!visited[w])
				dfs(g,w);
			w=getnextvex(g,v,w);
		}
		visited[terminal[teri-1]]=0;
	}
	teri--;
	

}


//廣度優先
bfs(adjlgraph g,int vi)
{
	teri=1;
	int front=0,rear=1,v;
	node *p;
	
	visited[vi]=1;
	queue[rear]=vi;
	terminal[teri]=vi;
	teri++;
	if(g.a[vi].x[0]==0&&g.a[vi].x[1]==0&&g.a[vi].x[2]==0)
		return 0;
	while(front!=rear)
	{
		front=(front+1)%maxvertices;
		v=queue[front];
		p=g.a[v].adj;
		while(p!=NULL)
		{
			if(visited[p->dest]==0)
			{
				visited[p->dest]=1;
				;
				rear=(rear+1)%maxvertices;
				queue[rear]=p->dest;
				terminal[teri]=p->dest;
				teri++;
				if(g.a[p->dest].x[0]==0&&g.a[p->dest].x[1]==0&&g.a[p->dest].x[2]==0)
					return 0;
			}
			p=p->next;
		}
	}
	return 0;
}



main()
{
	adjlgraph totalg;
	int i;
	cout<<"請輸入修道士或者野人的人數:";
	cin>>n;
	cout<<"請輸入小船能容納的最多人數:";
	cin>>c;
	adjinitiate(&totalg,n,c);

	
	for(i=0;i<maxvertices;i++)
		visited[i]=0;
	teri=1;
	int jj,ccc[30000];
	for(int xx=0;xx<30000;xx++)
	{
		for(int yy=0;yy<100;yy++)
			result[xx][yy]=-1;
		ccc[xx]=-1;
	}
	dfs(totalg,0);
	//cout<<endl<<"深度優先"<<endl;
	for(jj=1;jj<30000&&result[jj][1]!=-1;jj++)
	{
		for(i=1;result[jj][i]!=-1;i++)
			;
		ccc[jj]=i;
	}
	if(jj==1)
		cout<<"渡河失敗。";
	else
	{
		cout<<"總共有"<<jj-1<<"解。";
		ccc[0]=10000;
	 for(i=1;ccc[i]!=-1;i++)
		{
			if(ccc[i]<ccc[0])
				ccc[0]=ccc[i];
		}
		int cccount=0;
		cout<<endl<<"邊數最少為"<<ccc[0]-1<<"個"<<endl;
		for(jj=1;ccc[jj]!=-1;jj++)
		{
			if(ccc[jj]==ccc[0])
			{
				for(i=1;result[jj][i]!=-1;i++)
					cout<<"("
					<<totalg.a[result[jj][i]].x[0]
					<<","
					<<totalg.a[result[jj][i]].x[1]
					<<","
					<<totalg.a[result[jj][i]].x[2]
					<<")"
					<<"  ";
				cccount++;
				cout<<endl;
			}
		}
		cout<<"邊數最少的通路共有"<<cccount<<"條";
	}
	return 0;
}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品视频中文字幕| 国产精品电影一区二区| 国产女人18水真多18精品一级做| 亚洲欧洲av在线| 日韩黄色小视频| 99国产精品久| 国产日韩在线不卡| 美女一区二区久久| 欧美日韩在线观看一区二区| 久久久国产精品不卡| 日韩av中文字幕一区二区| 91免费观看在线| 久久精品亚洲一区二区三区浴池 | 一本大道久久a久久精二百| 91精品国产欧美一区二区成人| 中文字幕一区二区三区在线播放 | 日本一区二区综合亚洲| 三级不卡在线观看| 在线精品视频免费播放| 国产精品美日韩| 丰满亚洲少妇av| 久久久久久免费毛片精品| 麻豆一区二区三| 久久久精品天堂| 久久成人免费网| 在线不卡中文字幕| 亚洲一区视频在线观看视频| 丁香六月综合激情| 国产精品久久久久桃色tv| 成人免费视频网站在线观看| 精品久久一区二区三区| 毛片av中文字幕一区二区| 欧美一区二区私人影院日本| 日韩中文字幕1| 日韩一卡二卡三卡四卡| 男女男精品视频| 在线综合视频播放| 日韩av中文字幕一区二区三区 | 日韩免费一区二区| 日产国产高清一区二区三区| 欧美乱妇一区二区三区不卡视频| 亚洲chinese男男1069| 欧美亚男人的天堂| 亚洲成va人在线观看| 制服丝袜中文字幕一区| 蜜臀av一区二区| 久久综合久久综合久久| 国产高清一区日本| 国产精品久久久久久久久果冻传媒| 成人精品视频一区二区三区 | 欧美成人精品二区三区99精品| 日韩精品成人一区二区三区| 日韩一区二区视频| 国产乱国产乱300精品| 国产精品久久久久久一区二区三区| 91在线观看下载| 亚洲成a人片在线观看中文| 日韩区在线观看| 在线精品视频一区二区三四| 天天操天天综合网| 久久免费美女视频| 色香蕉久久蜜桃| 美女视频黄 久久| 欧美国产视频在线| 欧美日韩国产片| 国产成人精品综合在线观看| 亚洲天天做日日做天天谢日日欢 | 亚洲第一成人在线| 国产亚洲综合在线| 欧美中文字幕一区二区三区亚洲| 婷婷国产v国产偷v亚洲高清| 久久在线观看免费| 欧美性生活大片视频| 激情综合一区二区三区| 亚洲卡通欧美制服中文| 日韩免费电影一区| 日本二三区不卡| 精品一区二区三区免费视频| 亚洲精品美腿丝袜| 久久综合久久久久88| 欧美日韩久久久一区| 国产成人在线看| 日韩电影在线免费观看| 国产精品国产精品国产专区不蜜| 777a∨成人精品桃花网| 不卡一区中文字幕| 国精品**一区二区三区在线蜜桃| 亚洲精品成人天堂一二三| 久久综合久色欧美综合狠狠| 欧美日韩精品一二三区| www.99精品| 国产成+人+日韩+欧美+亚洲| 免费人成黄页网站在线一区二区| 中文字幕色av一区二区三区| 日韩精品一区二区三区三区免费| 欧美性色黄大片| 99re这里都是精品| 成人深夜福利app| 国内精品伊人久久久久av一坑| 亚洲一区二区三区小说| 亚洲欧美综合另类在线卡通| 久久综合视频网| 精品成人佐山爱一区二区| 欧美疯狂性受xxxxx喷水图片| 91亚洲永久精品| 成人精品一区二区三区四区 | 国产欧美一区二区精品性色超碰| 91精品婷婷国产综合久久竹菊| 欧美日韩中文字幕一区二区| 日本精品免费观看高清观看| 99久久精品一区二区| av亚洲精华国产精华精华| 成人网页在线观看| 风流少妇一区二区| 国产69精品久久99不卡| 国产精品一级黄| 国产福利一区二区三区视频在线| 国产精品2024| 夫妻av一区二区| 一本色道久久综合精品竹菊| 色呦呦一区二区三区| 91日韩在线专区| 在线精品国精品国产尤物884a| 欧美性大战久久| 欧美一区二区三区思思人| 91精品国产综合久久久久久漫画 | 国产精品久久久久久久浪潮网站| 欧美国产日韩在线观看| 中文字幕一区在线观看| 一区二区在线观看视频在线观看| 亚洲综合999| 天堂成人免费av电影一区| 日韩成人免费电影| 韩国三级在线一区| 成人黄色综合网站| 91啪亚洲精品| 91精品国产综合久久精品app| 欧美一区二区二区| 国产亚洲综合av| 亚洲人成网站在线| 亚洲第一福利视频在线| 久久精品国产澳门| 久色婷婷小香蕉久久| 粉嫩一区二区三区在线看| 91视频免费播放| 欧美一区二区三区精品| 国产亚洲综合在线| 亚洲男女一区二区三区| 日本一区中文字幕| 粉嫩在线一区二区三区视频| 欧美三级电影网| 国产亚洲综合av| 亚洲国产成人av网| 精久久久久久久久久久| proumb性欧美在线观看| 欧美一区二区三区思思人| 国产精品久久久久久亚洲伦| 日韩不卡一区二区三区| 9人人澡人人爽人人精品| 91精品蜜臀在线一区尤物| 国产精品久久看| 极品少妇xxxx精品少妇| 欧美四级电影在线观看| 国产色产综合产在线视频| 亚洲成人精品在线观看| 国产ts人妖一区二区| 91精品国产综合久久精品| 中文字幕日韩一区| 国内精品伊人久久久久影院对白| 日本精品一级二级| 欧美国产精品中文字幕| 日韩黄色小视频| 日本伦理一区二区| 国产三区在线成人av| 玖玖九九国产精品| 欧美人妖巨大在线| 亚洲人午夜精品天堂一二香蕉| 国产综合色产在线精品| 91精品国产综合久久久久久久| 亚洲欧美国产高清| 高清成人在线观看| 日韩视频在线永久播放| 一区二区不卡在线视频 午夜欧美不卡在| 国产三级精品三级在线专区| 婷婷国产v国产偷v亚洲高清| 99久久精品国产网站| 国产日本欧美一区二区| 国产乱码精品一区二区三区忘忧草 | 国产精品女同一区二区三区| 日韩av电影免费观看高清完整版在线观看 | 欧美日韩和欧美的一区二区| 欧美极品少妇xxxxⅹ高跟鞋| 久久99国产精品成人| 制服丝袜一区二区三区| 午夜免费久久看| 欧美图区在线视频| 一区二区三区在线看| 91美女蜜桃在线| 一区二区视频在线| 91网站黄www|