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

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

?? routing.cpp

?? 實現(xiàn)最短路徑算法。 實現(xiàn)最短路徑算法。
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
			nextVex->firstArc = 0;
			nextVex->nextVex = 0;
			if(count == 0)
			{
				*graph = nextVex;
				currVex = nextVex;
			}
			else
			{
				currVex->nextVex = nextVex;
				currVex = nextVex;
			}
			count++;
		}
		else
			return false;
	}
	return true;
}
//////////////////////////////////////////////////////////////////
//topo information 
//this function is really construct the graph
/////////////////////////////////////////////////////////////////
bool Set_Topo(FILE *topoFp,VexNode **graph)
{
	int      i;
	bool     addFlag;
	int      arcNo,souNo,desNo;
	char     arcName[MAXNAME];
	double   x1,y1,x2,y2;
	VexNode  *currVex;
	ArcNode  *currArc,*nextArc;
	currArc = 0;
	nextArc = 0;
	while(!feof(topoFp))
	{
		memset(arcName,'\0',MAXNAME);
		if(fscanf(topoFp,"%d %s %d %lf %lf %d %lf %lf",&arcNo,arcName,&souNo,&x1,&y1,&desNo,&x2,&y2) == 8)
		{
			currVex = *graph;
			while(currVex->vexNo != souNo && currVex->nextVex)
				currVex = currVex->nextVex;
			if(currVex->vexNo != souNo)
				return false;
			addFlag = false;
			currArc = currVex->firstArc;
			if(!currArc)
				addFlag = true;
			else
			{
				while(currArc->nextArc && currArc->arcNo != arcNo)
					currArc = currArc->nextArc;
				if(currArc->arcNo == arcNo)
				{
					currArc->arcNo   = arcNo;
					currArc->info.tailVexNo    = desNo;
					memcpy(currArc->info.arcName,arcName,MAXNAME);
				}
				else
					addFlag = true;
			}

			if(addFlag)
			{
				nextArc  = (ArcNode *)malloc(sizeof(ArcNode));
				if(nextArc == 0)
					return false;
				nextArc->arcNo          = arcNo;
				nextArc->info.tailVexNo = desNo;
				memcpy(currArc->info.arcName,arcName,MAXNAME);
				memset(nextArc->info.roadName,'\0',MAXNAME);
				nextArc->info.distance   = MAXCOST;
				nextArc->info.time       = MAXCOST;
				nextArc->nextArc         = 0;
				//
				if(!(currVex->firstArc))
					currVex->firstArc = nextArc;
				else
					currArc->nextArc = nextArc;
			}
			currVex = *graph;
			while(currVex->vexNo != desNo && currVex->nextVex)
				currVex = currVex->nextVex;
			if(currVex->vexNo != desNo)
				return false;
			for(i=0;i<MAXARCNUM;i++)//pay attention to it
			{
				if(fscanf(topoFp,"%d",&arcNo) == 1 && arcNo >0)
				{
					addFlag = false;
					currArc = currVex->firstArc;
					if(!currArc)
						addFlag = true;
					else
					{
						while(currArc->nextArc && currArc->arcNo != arcNo)
							currArc = currArc->nextArc;
						if(currArc->arcNo == arcNo)
							currArc->arcNo   = arcNo;
						else
							addFlag = true;
					}

					if(addFlag)
					{
						nextArc  = (ArcNode *)malloc(sizeof(ArcNode));
						if(nextArc == 0)
							return false;
						nextArc->arcNo          = arcNo;
						nextArc->info.tailVexNo = NOVERTEX;
						memset(nextArc->info.arcName,'\0',MAXNAME);
						memset(nextArc->info.roadName,'\0',MAXNAME);
						nextArc->info.distance   = MAXCOST;
						nextArc->info.time       = MAXCOST;
						nextArc->nextArc         = 0;
						if(!(currVex->firstArc))
						{
							currVex->firstArc = nextArc;
							currArc = nextArc;
						}
						else
							currArc->nextArc = nextArc;
					}
				}
			}
		}
		else
			return false;
	}
	return true;
}
//////////////////////////////////////////////////////////////////
//set the distance and time attribute 
/////////////////////////////////////////////////////////////////
bool Set_Attr(FILE *attrFp,VexNode **graph)
{
	bool     findFlag;//
	int      arcNo;
	char     arcName[MAXNAME],roadName[MAXNAME];
	double   tim,dis;
	VexNode  *currVex;
	ArcNode  *currArc;
	while(!feof(attrFp))
	{
		memset(arcName,'\0',MAXNAME);
		memset(roadName,'\0',MAXNAME);
		if(fscanf(attrFp,"%d %s %lf %lf %s",&arcNo,arcName,&dis,&tim,roadName) == 5)
		{
			currVex = *graph;
			findFlag = false;
			while(currVex && !findFlag)
			{
				currArc = currVex->firstArc;
				if(currArc)
				{
					while(currArc->arcNo != arcNo && currArc->nextArc)
						currArc = currArc->nextArc;
					if(currArc->arcNo == arcNo)
					{
						memcpy(currArc->info.arcName,arcName,MAXNAME);
						memcpy(currArc->info.roadName,roadName,MAXNAME);
						currArc->info.distance = dis;
						currArc->info.time     = dis/tim;
						findFlag = true;
					}
				}
				currVex = currVex->nextVex;
			}
			if(!findFlag)
				return false;
		}
		else
			return false;
	}
	return true;
}
//////////////////////////////////////////////////////////////////
//complement the graph
/////////////////////////////////////////////////////////////////
bool complement(VexNode **graph)
{
	int      arcNo,souNo,desNo;
	VexNode  *currVex,*nextVex;
	ArcNode  *currArc,*nextArc;
	currVex = *graph;
	while( currVex )
	{
		if( currVex->firstArc )
		{
			souNo  = currVex->vexNo;
			currArc = currVex->firstArc;
			while(currArc)
			{
				desNo  = currArc->info.tailVexNo;
				if(desNo == NOVERTEX)
				{
					arcNo  = currArc->arcNo;
					nextVex = *graph;
					while(nextVex)
					{
						if(nextVex != currVex && nextVex->vexNo == souNo && nextVex->firstArc)
						{
							nextArc = nextVex->firstArc;
							while(nextArc->nextArc && (nextArc->arcNo != arcNo || nextArc->info.tailVexNo == NOVERTEX))
								nextArc = nextArc->nextArc;
							if(nextArc->arcNo == arcNo && nextArc->info.tailVexNo != NOVERTEX)
								currArc->info.tailVexNo = nextArc->info.tailVexNo;
						}
						nextVex = nextVex->nextVex;
					}
				}
				currArc = currArc->nextArc;
			}
		}
		currVex = currVex->nextVex;
	}
	return true;
}
///////////////////////////////////////////////////////////////
//Dijkstra function
//vertex is numbered from 1...
///////////////////////////////////////////////////////////////
bool graph_Dij(VexNode *graph,int souNo,int desNo,double *allCost,int kind,PathNode **path)
{
	bool existFlag,minFlag;
	int vexNo,arcNo;    //vex No.
	int vexNum;    //vex Number
	int i,j,k;     
	int    *pSet;   //store the final vertex of shortest paths that found
	int    *pathV;  //store the fore vertex of the vertex in the shortest path
	int    *pathA;  //store the arc link to the vertex in the shortest path
	double *cost;   //store the cost of the shortest path
	VexNode *currVex;
	ArcNode *currArc;
	PathNode *currPath,*nextPath;

	//get vertex number
	vexNum = 0;
	currVex = graph;
	while(currVex)
	{
		vexNum++;
		currVex = currVex->nextVex;
	}
	if(souNo<1 || souNo>vexNum || desNo<1 || desNo>vexNum)
		return false;
	pSet  = (int *)malloc(sizeof(int)*vexNum );
	pathV  = (int *)malloc(sizeof(int)*vexNum );
	pathA = (int *)malloc(sizeof(int)*vexNum );
	cost  = (double *)malloc(sizeof(double)*vexNum );
	if(!pSet || !pathV || !cost || !pathA)
		return false;
	//initialize
	for(i=0;i<vexNum;i++)
	{
		pSet[i]  = NOVERTEX;
		pathV[i]  = NOVERTEX;
		pathA[i] = NOARC;
		cost[i]  = MAXCOST;
	}
	currVex = graph;
	while(currVex)
	{
		if(currVex->vexNo == souNo)
		{
			currArc = currVex->firstArc;
			while(currArc)
			{
				if(kind == DISTANCE)
					cost[currArc->info.tailVexNo-1]  = currArc->info.distance;
				else if(kind == TIME)
					cost[currArc->info.tailVexNo-1]  = currArc->info.time;
				pathV[currArc->info.tailVexNo-1] = currVex->vexNo;
				pathA[currArc->info.tailVexNo-1] = currArc->arcNo;
				currArc = currArc->nextArc;

			}
		}
		currVex = currVex->nextVex;
	}
	//get shortest path
	existFlag = false;
	pSet[0]     = souNo;
	for( i = 1; i < vexNum; i++)
	{
		//
		bool   inFlag;
		int    minNo;
		double minCost = MAXCOST;
		minFlag = false;
		//find the shortest path's final vertex
		for(j=0;j< vexNum; j++)
		{
			inFlag = false;
			for( k = 1; k < i; k++)
			{
				if(pSet[k] == j+1)
				{
					inFlag = true;
					break;
				}
				if(pSet[k] == NOVERTEX)
				{
					break;
				}
			}
			if(inFlag)
				continue;
			if(cost[j] < minCost)
			{
				minCost = cost[j];
				minNo = j+1;
				minFlag = true;
			}
		}
		if(minFlag == false)
		{
			existFlag = false;
			break;// go out the loop
		}
		pSet[i]       = minNo;
		cost[minNo-1] = minCost;
		if(minNo == desNo)
		{
			existFlag = true;
			break;//go out the loop
		}
		//change the cost linked with this vertex
		currVex = graph;
		while(currVex->nextVex && currVex->vexNo != minNo)
			currVex = currVex->nextVex;
		if(currVex->vexNo == minNo)
		{
			currArc = currVex->firstArc;
			while(currArc )
			{
				if(kind == DISTANCE)
				{
					if(currArc->info.distance + minCost < cost[currArc->info.tailVexNo-1])
					{
						cost[currArc->info.tailVexNo-1]  = currArc->info.distance + minCost;
						pathV[currArc->info.tailVexNo-1] = minNo;
						pathA[currArc->info.tailVexNo-1] = currArc->arcNo;
					}
				}
				else if(kind == TIME)
				{
					if(currArc->info.time + minCost < cost[currArc->info.tailVexNo-1])
					{
						cost[currArc->info.tailVexNo-1]  = currArc->info.time + minCost;
						pathV[currArc->info.tailVexNo-1] = minNo;
						pathA[currArc->info.tailVexNo-1] = currArc->arcNo;
					}
				}
				currArc = currArc->nextArc;
			}
		}
	}
	if(existFlag)
	{
		nextPath = (PathNode*)malloc(sizeof(PathNode));
		if(nextPath == 0)
			return false;
		nextPath->vexNo = desNo;
		nextPath->arcNo = NOARC;
		currVex = graph;
		while(currVex->nextVex && currVex->vexNo != desNo)
			currVex = currVex->nextVex;
		memcpy(nextPath->vexName,currVex->info.vexName,MAXNAME);
		memset(nextPath->arcName ,'\0',MAXNAME);
		memset(nextPath->roadName ,'\0',MAXNAME);
		nextPath->next = 0;
		for( j = i-1; j>=0; j--)
		{
			vexNo = pathV[nextPath->vexNo-1];
			arcNo = pathA[nextPath->vexNo-1];
			currPath = (PathNode*)malloc(sizeof(PathNode));
			if(currPath == 0)
				return false;
			currPath->vexNo = vexNo;
			currPath->arcNo = arcNo;
			currVex = graph;
			while(currVex->nextVex && currVex->vexNo != vexNo)
				currVex = currVex->nextVex;
			memcpy(currPath->vexName,currVex->info.vexName,MAXNAME);
			currArc = currVex->firstArc;
			while(currArc->nextArc && currArc->arcNo != arcNo)
				currArc = currArc->nextArc;
			memcpy(currPath->arcName,currArc->info.arcName,MAXNAME);
			memcpy(currPath->roadName,currArc->info.roadName,MAXNAME);
			currPath->next = nextPath;
			nextPath = currPath;

			if(currPath->vexNo == souNo)
				break;
		}
		*path = currPath;
		*allCost = cost[desNo-1];
	}
	else
	{
		*path = 0;
		*allCost = MAXCOST;
	}

	free(pSet);
	free(pathV);
	free(pathA);
	free(cost);
	return true;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美国精品在线观看| 在线欧美小视频| av一本久道久久综合久久鬼色| 午夜精品久久久久久久99水蜜桃 | 91精品1区2区| 91蜜桃免费观看视频| 成人av网站大全| 国产成人午夜高潮毛片| 国产91精品欧美| 韩国一区二区三区| 国产综合色视频| 国产91丝袜在线观看| 成人一道本在线| 成人h动漫精品| 92精品国产成人观看免费| 91天堂素人约啪| 精品视频全国免费看| 欧美夫妻性生活| 日韩午夜激情视频| 精品国产欧美一区二区| 久久久久久久综合| 中文字幕成人av| 亚洲天堂成人网| 亚洲一区在线观看视频| 午夜视频在线观看一区| 麻豆成人av在线| 国产激情一区二区三区桃花岛亚洲| 国产91在线看| 欧美优质美女网站| 91精选在线观看| 精品少妇一区二区三区视频免付费 | 色一区在线观看| 色婷婷亚洲精品| 欧美男男青年gay1069videost| 欧美日韩国产另类一区| 91精品国产麻豆国产自产在线| 精品国产髙清在线看国产毛片| 国产女主播一区| 亚洲免费观看高清| 青青草原综合久久大伊人精品优势 | 视频一区中文字幕国产| 精品一区二区三区在线视频| 成人精品免费看| 91在线免费视频观看| 欧美裸体一区二区三区| 久久久精品免费网站| 亚洲欧美怡红院| 热久久免费视频| 懂色一区二区三区免费观看| 欧美三区在线观看| 久久午夜色播影院免费高清| 亚洲精品亚洲人成人网| 久久国产精品露脸对白| 93久久精品日日躁夜夜躁欧美| 欧美一级高清片| 国产精品狼人久久影院观看方式| 午夜精品爽啪视频| 欧美日韩和欧美的一区二区| 久久影视一区二区| 亚洲第一激情av| 国产99久久久久| 884aa四虎影成人精品一区| 国产精品乱人伦中文| 日本午夜一区二区| 91麻豆国产精品久久| 欧美电视剧在线看免费| 亚洲精品国产精华液| 国产一区二三区好的| 777久久久精品| 亚洲天堂成人在线观看| 国产精品资源站在线| 欧美日韩国产综合一区二区三区| 国产精品午夜久久| 精品一区二区三区在线观看| 在线看日本不卡| 国产精品久久久爽爽爽麻豆色哟哟| 午夜精品成人在线| 色偷偷88欧美精品久久久| 久久久国产精品午夜一区ai换脸| 午夜精品福利一区二区三区蜜桃| 91论坛在线播放| 国产精品三级av| 国产一区二区中文字幕| 欧美xfplay| 日韩国产欧美三级| 欧美色国产精品| 亚洲精品视频观看| 91免费国产在线观看| 国产精品天美传媒| 国产美女视频一区| 精品日韩欧美在线| 日韩**一区毛片| 欧美日本国产视频| 亚洲电影你懂得| 日本韩国视频一区二区| 综合分类小说区另类春色亚洲小说欧美| 国产一区日韩二区欧美三区| 欧美成人高清电影在线| 免费人成黄页网站在线一区二区| 欧美日韩一级片在线观看| 一区二区不卡在线视频 午夜欧美不卡在 | 日本va欧美va精品| 欧美日韩一区二区三区在线| 一区二区三区在线观看欧美| 色婷婷精品久久二区二区蜜臀av | 国产精品传媒在线| 成人精品视频一区| 日韩一区欧美一区| 91蜜桃视频在线| 亚洲免费av在线| 欧美伊人久久大香线蕉综合69 | 久久精品国产在热久久| 欧美一级片免费看| 青草av.久久免费一区| 日韩三级电影网址| 久久成人久久爱| 久久久99精品免费观看| 国产福利一区二区三区在线视频| 欧美激情一区二区三区四区 | 欧美一卡二卡在线| 日韩avvvv在线播放| 欧美videos中文字幕| 久久99精品视频| 国产日韩欧美一区二区三区乱码| 粉嫩一区二区三区性色av| 中文字幕欧美一区| 91精品福利在线| 日本不卡在线视频| 2014亚洲片线观看视频免费| 国产成人免费视| 亚洲婷婷在线视频| 欧美日韩一区成人| 美国欧美日韩国产在线播放| 国产日韩精品一区| 91欧美一区二区| 午夜精品福利一区二区三区av| 精品国产一区二区国模嫣然| 国产成+人+日韩+欧美+亚洲| 亚洲伦在线观看| 91精品国产欧美一区二区成人 | 久久精品亚洲乱码伦伦中文| 成人毛片视频在线观看| 亚洲va欧美va人人爽| 久久久久久久久岛国免费| av在线播放一区二区三区| 亚洲一区二区三区国产| 欧美大胆一级视频| 成人国产电影网| 婷婷久久综合九色综合绿巨人| 亚洲精品一区二区三区蜜桃下载| av午夜精品一区二区三区| 午夜亚洲福利老司机| 久久精品夜色噜噜亚洲aⅴ| 日本电影亚洲天堂一区| 国产一区二区精品在线观看| 一区二区三区在线观看国产| 欧美丰满美乳xxx高潮www| 国产剧情一区二区| 亚洲精品国久久99热| 精品国产免费久久| 欧美性一级生活| 国产v日产∨综合v精品视频| 午夜视频在线观看一区二区三区| 国产欧美综合在线| 欧美猛男超大videosgay| 成人成人成人在线视频| 蜜桃精品视频在线| 一区二区不卡在线视频 午夜欧美不卡在| 精品成人在线观看| 欧美日韩国产中文| av一区二区三区| 狠狠色丁香久久婷婷综合丁香| 亚洲一线二线三线久久久| 国产情人综合久久777777| 日韩一区二区电影在线| 91在线精品一区二区| 国产一区二区伦理片| 日本视频一区二区| 亚洲激情校园春色| 中文乱码免费一区二区| 亚洲精品在线免费播放| 欧美无砖砖区免费| 99精品在线观看视频| 粉嫩av一区二区三区在线播放| 奇米888四色在线精品| 亚洲成人动漫精品| 亚洲欧美色综合| 国产精品美女一区二区| 久久综合精品国产一区二区三区| 欧美精品aⅴ在线视频| 在线视频欧美区| 丁香另类激情小说| 国产精品原创巨作av| 天堂在线亚洲视频| 一区二区三区加勒比av| 亚洲人一二三区| 中文字幕乱码一区二区免费| 久久久久久久久久美女| 91精品国产乱码久久蜜臀| 欧美日本一区二区在线观看|