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

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

?? graph.cpp

?? 一個能求圖中任兩頂點之間的最短距離的程序
?? CPP
字號:
#include"Graph.h"
#include<iostream.h>
#include<fstream.h>
#include<string.h>
int MaxPath=1000000;
int MaxVex=50;
int InCreaceNum=10;


int Locat(ALGraph &G,VertexType info)
{
	int index=0;
	while((index<G.vexnum)&&(strcmp((G.pVNode+index)->data,info)!=0))
			index++;

	if(index>=G.vexnum)
	{
		
		return -1;
	}
	return index;
}

bool ArcIn(ALGraph &G,VertexType &begin,VertexType &end)
{
	int beginindex=Locat(G,begin);
	int endindex=Locat(G,end);
	ArcNode *parc;
	if((beginindex==-1)||(endindex==-1))
		return false;
	parc=(G.pVNode+beginindex)->firstarc;
	while(parc)
	{
		if(parc->adjvex==endindex)
			return true;
		parc=parc->next;
	}
	return false;
}


void CreateG(ALGraph &G,int kind)//構造圖
{	
	int vexnum,arcnum;
	cout<<"輸入圖的頂點數(shù):";
	cin>>vexnum;
	G.vexnum=vexnum;
	cout<<"輸入圖的邊數(shù):";
	cin>>arcnum;
	G.arcnum=arcnum;
	G.pVNode=new VNode[MaxVex];

	VertexType vex;
	for(int i=0;i<vexnum;i++)
	{
		cout<<"輸入第"<<i+1<<"個頂點數(shù)據(jù):";
		
		cin>>vex;
		if(Locat(G,vex)!=-1)
		{
			cout<<"該頂點已經(jīng)存在,請重新輸入!"<<endl;
			i--;
			continue;
		}
		else
		{
			strcpy((G.pVNode+i)->data,vex);
			(G.pVNode+i)->firstarc=0;
		}
	}
	cout<<"頂點輸入完畢!"<<endl;
	cout<<endl;

	for(int j=1;j<=arcnum;j++)
	{
		if(kind==UDG)
			cout<<"輸入第"<<j<<"條邊(格式:頂點 頂點 ):";
		else if(kind==DG)
			cout<<"輸入第"<<j<<"條弧(格式:弧頭 弧尾):";
		else if(kind==UDN)
			cout<<"輸入第"<<j<<"條邊(格式:頂點 頂點 邊信息):";
		else if(kind==DN)
			cout<<"輸入第"<<j<<"條弧(格式:弧頭 弧尾 弧信息):";

		VertexType begin,end;
		int beginindex=0,endindex=0;
		InfoType *info=new InfoType;

		cin>>begin;
		cin>>end;

		if((kind==UDN)||(kind==DN))//如果是網(wǎng)
			cin>>(*info);
		else 
			(*info)=1;
		
		beginindex=Locat(G,begin);
		endindex=Locat(G,end);
		if(beginindex==-1)
		{
			cout<<"起始節(jié)點不存在,請重新輸入!"<<endl;
			j--;
			continue;
		}
	
		if(endindex==-1)
		{
			cout<<"結束節(jié)點不存在,請重新輸入!"<<endl;
			j--;
			continue;
		}
		
		if(ArcIn(G,begin,end))
		{
			cout<<"這條邊已經(jīng)存在,請重新輸入!"<<endl;
			j--;
			continue;
		}
		
		ArcNode *p=new ArcNode;
		p->adjvex=endindex;
		p->info=info;

		p->next=(G.pVNode+beginindex)->firstarc;
		(G.pVNode+beginindex)->firstarc=p;

		if((kind==UDG)||(kind==UDN))//如果是無向的
		{
			p=new ArcNode;
			p->adjvex=beginindex;
			p->info=info;

			p->next=(G.pVNode+endindex)->firstarc;
			(G.pVNode+endindex)->firstarc=p;
		}
	}
}



bool CreateGraph(ALGraph &G)//構造圖
{
	int kind;

	cout<<"請輸入圖的類型(1:無向圖;2:有向圖;3:無向網(wǎng);4:有向網(wǎng)):";
	cin>>kind;
	while((kind!=1)&&(kind!=2)&&(kind!=3)&&(kind!=4))
	{
		cout<<"輸入錯誤!"<<endl;
		cout<<"請輸入圖的類型(1:無向圖;2:有向圖;3:無向網(wǎng);4:有向網(wǎng)):";
	}
	if(cin.fail())
	{
		cout<<"圖構造失敗!"<<endl;
		return false;
	}
	G.kind=kind;
	CreateG(G,kind);
	cout<<"圖構造好了!"<<endl;
	return true;
}



void BFSTraverse(ALGraph &G,void (*visit)(VNode &vnode))//廣度優(yōu)先遍歷
{
	Queue Q;
	InitQueue(Q);
	int *pvisited;
	pvisited=new int[G.vexnum];

	for(int i=0;i<G.vexnum;i++)
	{
		pvisited[i]=0;
	}
	
	for(int v=0;v<G.vexnum;v++)
	{
		if(!pvisited[v])
		{
			visit(G.pVNode[v]);		
			pvisited[v]=1;
			EnQueue(Q,v);
		
			while(!QueueEmpty(Q))
			{
				int cur;
				DeQueue(Q,cur);

				ArcNode *parc;
				parc=(G.pVNode+cur)->firstarc;
				while(parc)
				{
					if(pvisited[parc->adjvex]==0)
					{				
						visit(G.pVNode[parc->adjvex]);
						pvisited[parc->adjvex]=1;
						EnQueue(Q,parc->adjvex);
					}
					parc=parc->next;
				}
			}
		}
	}
	
	DestroyQueue(Q);

}



int *pvisited;
void (*visit)(VNode &vnode);


void DFS(ALGraph &G,int v)
{
	pvisited[v]=1;
	visit(G.pVNode[v]);
	ArcNode *arc;
	arc=((G.pVNode+v)->firstarc);
	while(arc)
	{
		int index=arc->adjvex;
		if(!pvisited[index])
			DFS(G,index);
		arc=arc->next;
	}

}

void DFSTraverse(ALGraph &G,void (*traval)(VNode &vnode))//深度優(yōu)先遍歷
{
	visit=traval;
	pvisited=new int[G.vexnum];
	for(int i=0;i<G.vexnum;i++)
		pvisited[i]=0;
	for(int v=0;v<G.vexnum;v++)
	{
		if(!pvisited[v])
			DFS(G,v);
	}
}

void SaveToFile(ALGraph &G,char filename[50])
{
	int kind=G.kind;
	ofstream outfile;
	int i;
	outfile.open(filename);
	outfile<<kind<<endl;
	outfile<<G.vexnum<<"  "<<G.arcnum<<endl;
	for(i=0;i<G.vexnum;i++)
		outfile<<(G.pVNode+i)->data<<"  ";

	outfile<<endl;

	for(i=0;i<G.vexnum;i++)
	{
		ArcNode *parc;
		parc=(G.pVNode+i)->firstarc;
		while(parc)
		{
			if((G.kind==DN)||(G.kind==DG))
			{
				outfile<<(G.pVNode+i)->data<<"   "<<(G.pVNode+parc->adjvex)->data<<"   ";
				if((kind==DN)||(kind==UDN))
					outfile<<*(parc->info);
				outfile<<endl;
			}
			else
			{	
				if(i<parc->adjvex)
				{
					outfile<<(G.pVNode+i)->data<<"   "<<(G.pVNode+parc->adjvex)->data<<"   ";
					if((kind==DN)||(kind==UDN))
						outfile<<*(parc->info);
					outfile<<endl;
				}
			}
			parc=parc->next;
		}
	}
	outfile.close();
}

void ReadFromFile(ALGraph &G,char filename[50])
{
	ifstream infile;
	infile.open(filename);
	infile>>G.kind;
	infile>>G.vexnum>>G.arcnum;
	G.pVNode=new VNode[MaxVex];
	for(int i=0;i<G.vexnum;i++)
	{
		infile>>(G.pVNode+i)->data;
		(G.pVNode+i)->firstarc=0;
	}
	
	for(i=1;i<=G.arcnum;i++)
	{
		VertexType begin,end;
		int beginindex=0,endindex=0;
		InfoType *info=new InfoType;

		infile>>begin;
		infile>>end;

		if((G.kind==UDN)||(G.kind==DN))
			infile>>(*info);
		else (*info)=1;
		
		beginindex=Locat(G,begin);
		endindex=Locat(G,end);

		ArcNode *p=new ArcNode;
		p->adjvex=endindex;
		p->info=info;

		p->next=(G.pVNode+beginindex)->firstarc;
		(G.pVNode+beginindex)->firstarc=p;

		if((G.kind==UDG)||(G.kind==UDN))//如果是無向的
		{
			p=new ArcNode;
			p->adjvex=beginindex;
			p->info=info;
			p->next=(G.pVNode+endindex)->firstarc;
			(G.pVNode+endindex)->firstarc=p;
		}
	}
}

void ToAdjMatrix(ALGraph &G,VertexType *&a,int **&pmatrix)
{
	a=new VertexType[G.vexnum];
	pmatrix=new int*[G.vexnum];
	for(int i=0;i<G.vexnum;i++)
	{
		strcpy(a[i],(G.pVNode+i)->data);
		pmatrix[i]=new int[G.vexnum];
		for(int j=0;j<G.vexnum;j++)
			pmatrix[i][j]=MaxPath;
		ArcNode *parc=(G.pVNode+i)->firstarc;
		while(parc)
		{
			pmatrix[i][parc->adjvex]=*(parc->info);
			parc=parc->next;
		}
		pmatrix[i][i]=0;
	}
}


void MinPath(ALGraph &G,VertexType v0)
{
	int v0index=Locat(G,v0);
	VertexType *pinfo=0;
	int **pmatrix=0;
	ToAdjMatrix(G,pinfo,pmatrix);
	bool *pfinal=new bool[G.vexnum];
	int i;
	int *pD=new int[G.vexnum];
	int **p;
	p=new int*[G.vexnum];
	int *pnum=new int[G.vexnum];
	for(i=0;i<G.vexnum;i++)
	{
		pfinal[i]=false;
		pD[i]=pmatrix[v0index][i];
		p[i]=new int[G.vexnum];
		for(int j=0;j<G.vexnum;j++)
			p[i][j]=0;
		pnum[i]=0;
	}
	int step;
	for(step=1;step<=G.vexnum-1;step++)
	{
		int minindex=0,curmin=pD[0];
		for(int j=0;j<G.vexnum;j++)
		{
			if(j!=v0index)
			{
				if(pfinal[j]==false)
				{
					minindex=j;
					curmin=pD[j];
					break;
				}
			}
		}
		for(int k=j+1;k<G.vexnum;k++)
		{
			if(k!=v0index)
			{
				if((pfinal[k]==false)&&(pD[k]<curmin))
				{
					curmin=pD[k];
					minindex=k;
				}
			}
		}
		pfinal[minindex]=true;
		for(k=0;k<G.vexnum;k++)
		{
			if((pfinal[k]==false)&& (k!=v0index) && (k!=minindex))
			{
				if(pD[k]>curmin+pmatrix[minindex][k])
				{
					pD[k]=curmin+pmatrix[minindex][k];
					for(int m=0;m<pnum[minindex];m++)
					{
						p[k][m]=p[minindex][m];
					}
					p[k][pnum[minindex]]=minindex;
					pnum[k]=pnum[minindex]+1;
				}
			}
		}
	}
	for(i=0;i<G.vexnum;i++)
	{
		if((i!=v0index)&&(pD[i]<MaxPath))
		{
			cout<<"從"<<v0<<" 到 "<<pinfo[i]<<" 的最短距離為:"<<pD[i]<<endl;
			cout<<v0<<"->";
			for(int k=0;k<=pnum[i]-1;k++)
			{
				cout<<pinfo[p[i][k]]<<"->";
			}
			cout<<pinfo[i]<<endl<<endl;
		}
	}

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
开心九九激情九九欧美日韩精美视频电影| 国产日韩欧美精品在线| 99久久精品国产麻豆演员表| 国产高清视频一区| 国产精品99久久久久久似苏梦涵| 久久国内精品视频| 另类调教123区| 国产毛片精品国产一区二区三区| 国产一区日韩二区欧美三区| 99热精品一区二区| 99久久精品国产一区二区三区| 高潮精品一区videoshd| fc2成人免费人成在线观看播放| 成人午夜又粗又硬又大| 99精品一区二区| 欧美亚洲综合色| 91麻豆精品国产自产在线观看一区| 国产精品亚洲第一区在线暖暖韩国| 欧美肥妇bbw| 日韩欧美国产精品| 久久久久久久综合狠狠综合| 成人免费小视频| 亚洲在线视频免费观看| 欧美a级一区二区| 国产精品一品视频| 在线亚洲免费视频| 欧美成人r级一区二区三区| 久久九九全国免费| 日韩精品电影一区亚洲| 免费黄网站欧美| 波多野结衣中文字幕一区| 在线精品亚洲一区二区不卡| 7777精品伊人久久久大香线蕉完整版 | 777a∨成人精品桃花网| 精品sm在线观看| 一区二区三区加勒比av| 久久99久久99小草精品免视看| 成人午夜在线免费| 91精品国产综合久久久蜜臀粉嫩 | 91精品国产入口在线| 国产网站一区二区三区| 亚洲午夜免费电影| 精品一区二区三区在线观看| 91麻豆免费视频| 欧美精品一区二区三区很污很色的| 亚洲人精品一区| 国产在线播放一区| 欧美精品v国产精品v日韩精品| 国产精品国产a级| 美女国产一区二区三区| 一本到一区二区三区| 久久久久久日产精品| 日日夜夜一区二区| 91国偷自产一区二区开放时间| 精品成人在线观看| 天堂蜜桃一区二区三区| 色妹子一区二区| 国产精品乱码一区二三区小蝌蚪| 图片区日韩欧美亚洲| 色香蕉久久蜜桃| 国产精品女人毛片| 国产一区二区三区av电影| 在线成人高清不卡| 天堂午夜影视日韩欧美一区二区| 色综合久久久久久久| 中文字幕中文字幕在线一区| 国产老妇另类xxxxx| 精品国产乱码91久久久久久网站| 亚洲黄色尤物视频| 91色porny| 亚洲色欲色欲www| av电影在线观看一区| 久久久久久久电影| 国产高清不卡一区二区| 久久精品一区二区三区不卡牛牛| 免费不卡在线观看| 欧美一区二区三区在| 蜜臀va亚洲va欧美va天堂| 91精品国产综合久久精品麻豆| 日日噜噜夜夜狠狠视频欧美人| 91麻豆精品国产91久久久使用方法| 亚洲电影你懂得| 欧美一区二区三区婷婷月色 | 日本一区二区三区dvd视频在线| 国产一区二区三区最好精华液| 精品久久久三级丝袜| 国产麻豆9l精品三级站| 中文在线一区二区| 一本大道久久精品懂色aⅴ| 一区二区国产盗摄色噜噜| 欧美怡红院视频| 日日夜夜免费精品视频| 久久久精品国产免大香伊| 成人91在线观看| 亚洲综合视频在线观看| 91麻豆精品国产综合久久久久久| 久久狠狠亚洲综合| 一色屋精品亚洲香蕉网站| 在线观看亚洲精品视频| 久久成人久久鬼色| 国产精品福利电影一区二区三区四区| 99精品黄色片免费大全| 丝袜a∨在线一区二区三区不卡| 日韩欧美黄色影院| 91看片淫黄大片一级在线观看| 亚洲电影在线免费观看| 精品处破学生在线二十三| 91亚洲精品久久久蜜桃| 日韩av一区二区三区四区| 久久精品亚洲一区二区三区浴池 | 国产精品99久久久久久似苏梦涵 | 日本欧美在线看| 国产精品久久久久久久久久久免费看| 欧洲精品在线观看| 国产高清精品久久久久| 亚洲国产精品自拍| 久久在线免费观看| 欧美肥妇bbw| 色综合久久久久综合体| 韩国女主播一区| 亚洲香肠在线观看| 国产午夜精品美女毛片视频| 欧美日韩午夜在线| 99国产精品视频免费观看| 久久 天天综合| 午夜精品在线看| 一区二区三区四区不卡视频| 久久女同性恋中文字幕| 欧美日韩精品电影| 99国产精品久| 国产成人av电影在线播放| 日韩不卡一区二区三区| 亚洲理论在线观看| 中文字幕亚洲成人| 国产欧美精品一区aⅴ影院| 日韩欧美卡一卡二| 91精品国模一区二区三区| 色88888久久久久久影院按摩| 国产老妇另类xxxxx| 久久国产精品露脸对白| 日本不卡一二三区黄网| 婷婷久久综合九色综合绿巨人| 日韩理论片在线| 国产精品激情偷乱一区二区∴| www久久精品| 久久综合久久综合久久综合| 精品av久久707| 日韩你懂的在线播放| 日韩精品中文字幕一区二区三区| 欧美日韩午夜在线视频| 337p亚洲精品色噜噜噜| 91超碰这里只有精品国产| 欧美男男青年gay1069videost| 欧美三级视频在线播放| 欧美日韩精品一区视频| 欧美精品自拍偷拍| 日韩午夜激情av| 欧美变态口味重另类| 日韩亚洲欧美一区| 欧美变态tickle挠乳网站| 精品99一区二区| 欧美国产日韩一二三区| 中文字幕一区在线| 一区二区三区加勒比av| 亚洲国产精品久久人人爱| 图片区小说区国产精品视频| 视频一区视频二区在线观看| 久久精品国产网站| 大桥未久av一区二区三区中文| 国产激情视频一区二区在线观看| av电影天堂一区二区在线观看| 91丝袜美腿高跟国产极品老师 | 国产一区二区按摩在线观看| 国产激情视频一区二区在线观看| 波多野结衣亚洲一区| 日本乱码高清不卡字幕| 欧美一区二区三区影视| 日本一区二区三区在线不卡| 亚洲国产日韩a在线播放性色| 日本亚洲视频在线| 顶级嫩模精品视频在线看| 91在线免费播放| 欧美一级一级性生活免费录像| 欧美tickling网站挠脚心| 国产精品每日更新在线播放网址| 一二三四区精品视频| 国产综合久久久久影院| 99综合电影在线视频| 欧美一级久久久久久久大片| 久久久久久久综合日本| 亚洲曰韩产成在线| 国产成人av影院| 欧美日韩情趣电影| 国产精品区一区二区三| 日韩国产高清在线| av在线不卡免费看| 精品国产一区a| 亚洲自拍偷拍麻豆| 成人sese在线| 久久亚洲综合色一区二区三区|