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

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

?? graphrect.h

?? 本源碼配合數(shù)據(jù)結(jié)構(gòu)(C++版 )嚴蔚敏
?? H
字號:
//圖的鄰接矩陣表示法(數(shù)組存儲)//圖的十字鏈表存儲
//
#include"stdio.h"
#include "stdlib.h"
//#include"iomanip.h"//setw(10)
  #define TRUE 1
  #define FALSE 0
  #define OK   1
  #define ERROR  0 
  #define INFEASIBLE -1
  #define OVERFLOW -2
  #define NULL 0
  typedef int Status;//函數(shù)的類型,其值是函數(shù)結(jié)果狀態(tài)代碼
  
#define MAX_VERTEX_NUM 20//最大頂點數(shù)
#define INFINITY 32768//無窮大

typedef int  GraphKind;//有向圖,有向網(wǎng),無向圖,無向網(wǎng)
typedef char VertexType;
typedef int VRType;
typedef int InforType;
//typedef bool final ;//當(dāng)其為TRUE時 表明已求得最短路徑
//typedef int **PathMatrix;//頂點的最短路徑數(shù)組
//typedef int *ShortPathTable;//頂點的最短路徑的帶權(quán)長度數(shù)組
typedef struct ArcCell{
	VRType adj;//VRType是頂點關(guān)系類型,對無權(quán)圖,用1或0表示相鄰否;對帶權(quán)圖,則為權(quán)值類型
	InforType *info;//改弧相關(guān)信息的指針
}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct {
	VertexType vexs[MAX_VERTEX_NUM];//頂點向量
	AdjMatrix arcs;//鄰接矩陣
	int vexnum ,arcnum;//圖的當(dāng)前頂點數(shù)和弧數(shù)
	GraphKind kind;//圖的種類標(biāo)志
}MGraph;

int LocateVex(MGraph G,char v){
	for(int i=0;v!=G.vexs[i]&&i<G.vexnum;++i);
	if(i>=G.vexnum)return -1;
	return i;
}
Status CreateUDN(MGraph &G){
	//采用數(shù)組(鄰接矩陣)表示法,構(gòu)造無向網(wǎng)
	int IncInfo=0;
	printf("請輸入圖的種類(有向1,無向0)\n");
	scanf("%d",&G.kind);
	printf("請輸入頂點數(shù)vexnum,弧數(shù)arcnum和各弧的其他信息IncInfo(默認值0)\n");
	scanf("%d%d%d",&G.vexnum,&G.arcnum,&IncInfo);//IncInfo為0則各弧不含其它信息
	printf("構(gòu)造頂點向量\n");
	for (int i1=0;i1<G.vexnum;++i1)
		scanf("%s",&G.vexs[i1]);//構(gòu)造頂點向量
	for(int i=0;i<G.vexnum;++i)
		for(int j=0;j<G.vexnum;++j){
			G.arcs[i][j].adj=INFINITY;//{adj,info}
			G.arcs[i][j].info=NULL;
		}
		char v1,v2;
		int w;
		for(int k=0;k<G.arcnum;++k){//構(gòu)造鄰接矩陣
			printf("輸入一條邊依附的頂點和權(quán)值v1 v2 w :\n");
			scanf("%s%s%d",&v1,&v2,&w);//輸入一條邊依附的頂點和權(quán)值
			int i=LocateVex(G,v1);
			int j=LocateVex(G,v2);//確定v1和v2在G中的位置
			G.arcs[i][j].adj=w;//弧的權(quán)值
			if(IncInfo)scanf("%d",&G.arcs[i][j].info);//若弧含有相關(guān)信息,則輸入
			if(!G.kind)G.arcs[j][i].adj=G.arcs[i][j].adj;//值<v1,v2>的對稱弧<v2,v1>
		}
		return OK;
}//CreateUDN
Status PrintfMGraph(MGraph G){
	printf("輸出鄰接矩陣\n");
	for(int i=0;i<G.vexnum;++i){
		printf("%d  %c ||  ",i,G.vexs[i]);
		for(int j=0;j<G.vexnum;++j){
			printf("%5d  ",G.arcs[i][j].adj);
		}
		j=0;
		printf("\n");
	}
	printf("----------32768代表無窮大----------\n");
	return OK;
}

Status ShortestPath_DIJ(MGraph G,VertexType vv,int P[][100],int D[]){
	//用Dijkstra算法求G的v0到其余頂點v的最短路徑及其帶權(quán)長度D[v]
	//若P[v][w]為TRUE,則w是從v0到w的當(dāng)前最短路徑的頂點
	//當(dāng)final[v]為TRUE時 表明已求得最短路徑
	int v0=LocateVex(G,vv);
	int final[10];
	for(int v=0;v<G.vexnum;++v){
		final[v]=FALSE;			//當(dāng)其為TRUE時 表明已求得最短路徑
		D[v]=G.arcs[v0][v].adj;
		for(int w=0;w<G.vexnum;++w) P[v][w]=FALSE;//設(shè)空路徑
		if(D[v]<INFINITY){
			P[v][v0]= TRUE;
			P[v][v]=TRUE;
		}
	}//for
	D[v0]=0;final[v0]=1;		//初始化,v0頂點屬于S集
	printf("%c到 v頂點的最短距離及途經(jīng)頂點\n",vv);
	int min=0;					//開始主循環(huán),每次求得v0到某個v頂點的最短路徑,并加v到S集
	for(int i=1;i<G.vexnum;++i){	///其余G.vexnum-1各頂點//循環(huán)n-1次結(jié)束
		min=INFINITY;			//當(dāng)前離所知的頂點v0的最近距離
		for(int w1=0;w1<G.vexnum;++w1)
			if(!final[w1])		//w頂點在V-S中
				if(D[w1]<min){
					v=w1;
					min=D[w1];	//w1離頂點v0最近
				}
		final[v]=TRUE;			//離v0點最近的v加入S集
		printf("\n    %c%8d",G.vexs[v],min);//輸出函數(shù)部分
		printf("        ");
		for(int j=0;j<G.vexnum;++j)
			if(P[v][j])printf("%c",G.vexs[j]);//輸出最短路徑上的所有頂點
		for(int w2=0;w2<G.vexnum;++w2)	//更新當(dāng)前最段路徑機距離
			if(!final[w2]&&(min+G.arcs[v][w2].adj<D[w2])){//修改D[w2]和P[w2]
				D[w2]=min+G.arcs[v][w2].adj;
				for(int s=0;s<G.vexnum;++s)
				P[w2][s]=P[v][s];
				P[w2][w2]=TRUE;		//P[w2]=P[v]+P[w2]
			}//if
	}//for
	printf("\n");
	return OK;
}

void MiniSpanTree_PRIM(MGraph G,VertexType u){
	struct {
		VertexType adjvex;
		VRType lowcost;
	}closedge[MAX_VERTEX_NUM];
	int k=LocateVex(G,u);
	for(int j=0;j<G.vexnum;++j)
		if(j!=k){
			closedge[j].adjvex=u;
			closedge[j].lowcost=G.arcs[k][j].adj;
		}
		closedge[k].lowcost=0;
		printf("Prim 算法輸出最小生成樹\n");
		for(int i=1;i<G.vexnum;++i){
			int min=INFINITY;
			int k1=0;
			for(int n=0;n<G.vexnum;++n){
				if(closedge[n].lowcost){
					if(closedge[n].lowcost<min){
						min=closedge[n].lowcost;
						k1=n;
					}
				}
			}
			printf("%c-->%c  ",closedge[k1].adjvex,G.vexs[k1]);
			closedge[k1].lowcost=0;
			for(int j1=0;j1<G.vexnum;++j1)
				if(G.arcs[k1][j1].adj<closedge[j1].lowcost){
					closedge[j1].lowcost=G.arcs[k1][j1].adj;
					closedge[j1].adjvex=G.vexs[k1];
				}
		}
		printf("\n");
}

//單鏈隊列 ,隊列的鏈?zhǔn)酱鎯Y(jié)構(gòu)
typedef int QElemType;
typedef struct QNode{
	QElemType data;
	struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
	QueuePtr front;
	QueuePtr rear;
}LinkQueue;
Status InitQueue(LinkQueue &Q){
	Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
	if(!Q.front)exit(OVERFLOW);
	Q.front->next=NULL;
	return OK;
}
Status QueueEmpty(LinkQueue Q){
	if(Q.front==Q.rear)return OK;
	else return ERROR;
}
Status EnQueue(LinkQueue &Q,QElemType e){
	QueuePtr p=(QueuePtr)malloc(sizeof(QNode));
	if(!p)exit(OVERFLOW);
	p->data=e;
	p->next=NULL;
	Q.rear->next=p;
	Q.rear=p;
	return OK;
}
Status DeQueue(LinkQueue &Q,QElemType &e){
	if(Q.front==Q.rear)return ERROR;
	QueuePtr p=Q.front->next;
	e=p->data;
	Q.front->next=p->next;
	if(Q.rear==p)Q.rear=Q.front;
	free(p);
	return OK;
}
Status GetHead(LinkQueue &Q,QElemType &e){
	QueuePtr p;
	if(QueueEmpty(Q))return 0;
	else {
		p=Q.rear;
		return p->data;
	}
	return OK;
}
Status DestroyQueue(LinkQueue &Q){
	while(Q.front){
		Q.rear=Q.front->next;
		free(Q.front);
		Q.front=Q.rear;//從前向后依次刪除隊列中的結(jié)點
	}
	return OK;
}

//十字鏈表結(jié)構(gòu)
//有向圖無向圖的十字鏈表存儲表示
typedef struct ArcBox{
	VRType tailvex,headvex;//VRType是int類型,該弧的尾和頭頂點的位置
	struct ArcBox *hlink,*tlink;//分別為弧頭相同的弧和弧尾相同的弧的鏈域
	InforType *info;//改弧相關(guān)信息的指針
}ArcBox;
typedef struct VexNode{
	VertexType data;//VRType是頂點關(guān)系類型,對無權(quán)圖,用1或0表示相鄰否;對帶權(quán)圖,則為權(quán)值類型
	ArcBox *firstin,*firstout;//分別指向該頂點的第一個如入弧和出弧
}VexNode;
typedef struct {
	VexNode xlist[MAX_VERTEX_NUM];//頂點向量
	int vexnum ,arcnum;//圖的當(dāng)前頂點數(shù)和弧數(shù)
	GraphKind kind;//圖的種類標(biāo)志
}OLGraph;

int LocateVex(OLGraph G,char v){
	for(int i=0;v!=G.xlist[i].data&&i<G.vexnum;++i);
	if(i>=G.vexnum)return -1;
	return i;
}
Status CreateUDG(OLGraph &G){
	//采用十字鏈表表示法,構(gòu)造無向網(wǎng)
	int IncInfo=0;
	printf("請輸入圖的種類(有向1,無向0)\n");
	scanf("%d",&G.kind);
	printf("請輸入頂點數(shù)vexnum,弧數(shù)arcnum和各弧的其他信息IncInfo(默認值0)\n");
	scanf("%d%d%d",&G.vexnum,&G.arcnum,&IncInfo);//IncInfo為0則各弧不含其它信息
	printf("構(gòu)造頂點向量\n");
	for (int i1=0;i1<G.vexnum;++i1){
		scanf("%s",&G.xlist[i1].data);//構(gòu)造頂點向量
		G.xlist[i1].firstin=NULL;//初始化指針
		G.xlist[i1].firstout=NULL;
		}
		char v1,v2;
		for(int k=0;k<G.arcnum;++k){//構(gòu)造十字鏈表
			printf("輸入一條邊依附的頂點v1 v2 :\n");
			scanf("%s%s",&v1,&v2);//輸入一條邊依附的頂點
			int i=LocateVex(G,v1);
			int j=LocateVex(G,v2);//確定v1和v2在G中的位置
			ArcBox* p=(ArcBox*)malloc(sizeof(ArcBox));
			p->tailvex=i;
			p->headvex=j;
			p->hlink=G.xlist[j].firstin;
			p->tlink=G.xlist[i].firstout;
			p->info=NULL;
			G.xlist[j].firstin	= G.xlist[i].firstout=p;//完成入弧出弧連頭的插入
			if(IncInfo)scanf("%d",&(p->info));//若弧含有相關(guān)信息,則輸入
			if(!G.kind){//值<v1,v2>的對稱弧<v2,v1>
				ArcBox* q=(ArcBox*)malloc(sizeof(ArcBox));
				q->tailvex=j;
				q->headvex=i;
				q->hlink=G.xlist[i].firstin;
				q->tlink=G.xlist[j].firstout;
				q->info=NULL;
				G.xlist[i].firstin = G.xlist[j].firstout=q;//完成入弧出弧連頭的插入
				if(IncInfo)scanf("%d",&(q->info));//若弧含有相關(guān)信息,則輸入
			}
		}
		return OK;
}//CreateUDG
void visit_OL(OLGraph G){
	//輸出十字表
	int i;
	ArcBox *p;
	printf("%4s%6s%25s\n","No","data","adjvexs of arcs'tailvex");
	for(i=0;i<G.vexnum;i++){
		printf("%4d%5c  ",i,G.xlist[i].data);
		for(p=G.xlist[i].firstout;p;p=p->tlink)
			printf("%3d",p->headvex);//弧所指的頂點的位置
		printf("\n");
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品免费久久久久| 久久久91精品国产一区二区精品| 亚洲人成网站色在线观看| 高清不卡一区二区在线| 国产精品传媒视频| 在线看一区二区| 日日摸夜夜添夜夜添国产精品| 欧美日韩午夜在线| 六月丁香综合在线视频| 久久九九久精品国产免费直播| 国产乱理伦片在线观看夜一区 | 欧美tickle裸体挠脚心vk| 精品一区二区av| 国产日韩欧美综合一区| 风间由美一区二区三区在线观看| 亚洲视频1区2区| 日韩欧美专区在线| 成人激情开心网| 亚洲国产婷婷综合在线精品| 日韩欧美高清dvd碟片| 懂色av一区二区三区蜜臀| 亚洲欧美在线视频观看| 欧美日韩专区在线| 经典三级视频一区| 亚洲人成精品久久久久久| 欧美精品日韩一本| 国产二区国产一区在线观看| 一区二区三区高清| 久久精品一区二区| 欧美在线短视频| 国产精品亚洲а∨天堂免在线| 亚洲人妖av一区二区| 91精品一区二区三区在线观看| 国产精品影视在线| 爽好多水快深点欧美视频| 久久久不卡影院| 欧美精品一级二级三级| 国产+成+人+亚洲欧洲自线| 亚洲一二三四区| 久久免费视频色| 欧美日精品一区视频| 国产伦精品一区二区三区视频青涩| 亚洲成人中文在线| 久久久精品免费免费| 欧美三级在线看| av电影在线观看不卡| 久久精品国产亚洲5555| 亚洲一线二线三线久久久| 国产日韩在线不卡| 欧美第一区第二区| 欧美在线观看一区二区| 丁香激情综合五月| 精品一区二区三区av| 日韩精品久久理论片| 一个色综合av| 中文字幕日韩欧美一区二区三区| 精品人在线二区三区| 欧美日韩亚洲国产综合| 91猫先生在线| 成人精品视频一区二区三区| 国产毛片精品国产一区二区三区| 亚洲第一在线综合网站| 亚洲另类一区二区| 亚洲日本在线天堂| 国产精品不卡在线| 国产精品乱人伦中文| 久久久亚洲精品一区二区三区| 日韩免费电影一区| 91精品国产综合久久香蕉麻豆| 欧美视频一区二| 精品视频在线看| 欧美中文字幕一二三区视频| 成+人+亚洲+综合天堂| 成人精品免费视频| av在线这里只有精品| 国产成人综合在线| 国产精品99久久久久久久vr| 国产成人av电影在线| 国产高清精品久久久久| 国产成人综合网| 国产激情一区二区三区| 成人一道本在线| 成人久久视频在线观看| 波多野结衣一区二区三区| proumb性欧美在线观看| 99综合影院在线| www.成人在线| 91成人在线免费观看| 欧美美女一区二区| 精品嫩草影院久久| 国产拍欧美日韩视频二区| 国产精品素人一区二区| 亚洲欧洲精品一区二区精品久久久| 国产精品久久久久久久久免费樱桃| 国产精品午夜免费| 一区二区三区不卡视频在线观看| 亚洲国产美女搞黄色| 日本免费新一区视频| 国产自产v一区二区三区c| 国产99精品在线观看| 91精品1区2区| 91精品中文字幕一区二区三区| 精品sm在线观看| 国产精品天天看| 亚洲国产一区二区视频| 久久99国产精品久久| 成人性视频免费网站| 欧美性做爰猛烈叫床潮| 日韩网站在线看片你懂的| 国产日韩欧美制服另类| 亚洲一区二区三区免费视频| 久久疯狂做爰流白浆xx| 99在线精品观看| 欧美精品少妇一区二区三区 | 欧美唯美清纯偷拍| 欧美一级日韩免费不卡| 国产精品美女久久久久高潮| 亚洲国产成人av网| 国产白丝精品91爽爽久久| 欧美影视一区在线| 久久久亚洲精华液精华液精华液| 亚洲男人的天堂在线观看| 久久国产精品露脸对白| 色婷婷久久久综合中文字幕 | 亚洲高清一区二区三区| 国产伦精品一区二区三区视频青涩 | 国产午夜精品福利| 亚洲精品成a人| 国产精品一区二区久久精品爱涩| 欧美丝袜第三区| 国产精品丝袜黑色高跟| 免费在线观看成人| 91久久精品一区二区二区| 亚洲精品在线三区| 亚洲h动漫在线| 91美女片黄在线观看91美女| 久久婷婷一区二区三区| 天天射综合影视| 色综合夜色一区| 国产农村妇女精品| 久草在线在线精品观看| 欧美日韩美少妇| 成人欧美一区二区三区白人| 国产资源在线一区| 日韩无一区二区| 日日夜夜免费精品视频| 欧美在线免费观看视频| 国产精品乱码人人做人人爱| 蜜桃av噜噜一区| 91超碰这里只有精品国产| 亚洲综合免费观看高清完整版| 成人福利视频在线看| 精品三级av在线| 久久精品国产999大香线蕉| 欧美日韩五月天| 一区二区在线观看av| 9i在线看片成人免费| 国产精品伦理一区二区| 成人免费观看男女羞羞视频| 久久午夜电影网| 国产麻豆精品视频| 精品精品国产高清a毛片牛牛| 亚洲va欧美va国产va天堂影院| 色香蕉久久蜜桃| 亚洲视频在线一区| 一本一道久久a久久精品综合蜜臀| 国产精品免费视频网站| av在线一区二区| 亚洲日本一区二区| 日本丰满少妇一区二区三区| 亚洲卡通动漫在线| 欧美视频中文字幕| 亚洲超碰精品一区二区| 欧美一区永久视频免费观看| 日韩二区三区四区| 精品国产污网站| 国产精品资源在线观看| 中文字幕国产一区| 成人黄色av电影| 一区二区三区日韩| 欧美日韩成人综合在线一区二区| 午夜精品一区二区三区免费视频| 欧美日韩一区二区在线视频| 琪琪一区二区三区| 久久美女艺术照精彩视频福利播放| 国产成人8x视频一区二区| 中文字幕在线不卡视频| 91福利在线看| 亚洲不卡一区二区三区| 精品国产髙清在线看国产毛片| 国产在线精品免费| 国产精品国产馆在线真实露脸| 色诱亚洲精品久久久久久| 午夜精品久久久久久久蜜桃app| 欧美一级高清大全免费观看| 国模冰冰炮一区二区| 亚洲少妇屁股交4| 欧美二区在线观看| 国产v综合v亚洲欧| 亚洲国产一区二区三区|