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

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

?? routing1.cpp

?? 實(shí)現(xiàn)最短路徑算法。 實(shí)現(xiàn)最短路徑算法。
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
				}
				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;
}
DllExport bool create_test(VexNode **graph,char *vexFile,char *topoFile)
{
	FILE *nodeFp,*lineFp;
	if(!(nodeFp = fopen(vexFile,"r")))
		return false;
	if(!(lineFp = fopen(topoFile,"r")))
		return false;
	int      vexNo,countArc,countVex,arcNum,arcNo,headNo,tailNo;
	char name[MAXNAME];
	double   x,y,v,d;
	VexNode  *currVex,*nextVex;
	ArcNode  *currArc,*nextArc;
	countVex = 0;
	nextVex = 0;
	while(!feof(nodeFp))
	{
		if(fscanf(nodeFp,"%d %lf %lf %d",&vexNo,&x,&y,&arcNum) == 4)
		{
			nextVex  = (VexNode *)malloc(sizeof(VexNode));
			if( nextVex == 0)
				return false;
			nextVex->vexNo  = vexNo;
			nextVex->info.x = x;
			nextVex->info.y = y;
			memset(nextVex->info.vexName,'\0',MAXNAME);
			nextVex->firstArc = 0;
			countArc = 0;
			for( int j=0;j<arcNum;j++)
			{
				if(fscanf(nodeFp,"%d ",&arcNo) == 1)
				{
					nextArc  = (ArcNode *)malloc(sizeof(ArcNode));
					if(nextArc == 0)
						return false;
					if(arcNo > 0)
						nextArc->arcNo  = arcNo;
					else
						nextArc->arcNo  = -arcNo;
					memset(nextArc->info.arcName,'\0',MAXNAME);
					memset(nextArc->info.roadName,'\0',MAXNAME);
					nextArc->info.distance = 0.0;
					nextArc->info.time = 0.0;
					nextArc->info.tailVexNo = NOVERTEX;
					nextArc->nextArc = 0;
					if(countArc == 0)
					{
						nextVex->firstArc = nextArc;
						currArc = nextArc;
					}
					else
					{
						currArc->nextArc = nextArc;
						currArc = nextArc;
					}
					countArc++;
				}
			}
			nextVex->nextVex = 0;
			if(countVex == 0)
			{
				*graph = nextVex;
				currVex = nextVex;
			}
			else
			{
				currVex->nextVex = nextVex;
				currVex = nextVex;
			}
			countVex++;
		}
		else
			return false;
	}
	while(!feof(lineFp))
	{
		if(fscanf(lineFp,"%d %d %d %s %lf %lf %d",&arcNo,&headNo,&tailNo,name,&v,&d,&arcNum) == 7)
		{
			currVex = *graph;
			while(currVex && currVex->vexNo != headNo)
				currVex = currVex->nextVex;
			if(currVex->vexNo == headNo)
			{
				currArc = currVex->firstArc;
				while(currArc && currArc->arcNo != arcNo)
					currArc = currArc->nextArc;
				if(currArc && currArc->info.tailVexNo == NOVERTEX)
				{
					currArc->info.tailVexNo = tailNo;
					memcpy(currArc->info.arcName,name,MAXNAME);
					currArc->info.distance = d;
					currArc->info.time = d/v;
				}
			}
			currVex = *graph;
			while(currVex && currVex->vexNo != tailNo)
				currVex = currVex->nextVex;
			if(currVex->vexNo == tailNo)
			{
				currArc = currVex->firstArc;
				while(currArc && currArc->arcNo != arcNo)
					currArc = currArc->nextArc;
				if(currArc && currArc->info.tailVexNo == NOVERTEX)
				{
					currArc->info.tailVexNo = headNo;
					memcpy(currArc->info.arcName,name,MAXNAME);
					currArc->info.distance = d;
					currArc->info.time = d/v;
				}
			}

			for(int j=0 ;j<arcNum;j++)
			{
				fscanf(lineFp,"%lf %lf ",&x,&y);
			}
		}
		else
			return false;
	}
	return true;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品成人悠悠色影视| 五月婷婷久久综合| 中文字幕一区二区三| 国产精品入口麻豆原神| 亚洲日本韩国一区| 夜夜亚洲天天久久| 久久99久久99小草精品免视看| 久久国产精品72免费观看| 国产乱码精品一品二品| 不卡av电影在线播放| 91丝袜呻吟高潮美腿白嫩在线观看| 99久久久久久| 欧美日韩国产高清一区二区三区 | 国产麻豆91精品| 91麻豆免费在线观看| 欧美一区二区女人| 国产精品激情偷乱一区二区∴| 一区二区三区日韩欧美| 韩日精品视频一区| 91九色02白丝porn| 中文字幕欧美日本乱码一线二线| 一区二区三区四区精品在线视频| 久久99精品国产麻豆婷婷洗澡| 大胆欧美人体老妇| 精品国产自在久精品国产| 国产精品对白交换视频| 激情五月激情综合网| 91行情网站电视在线观看高清版| 久久久久成人黄色影片| 亚洲成人av电影| 色综合一个色综合| 国产精品国产a级| 国产精品自拍三区| 亚洲精品在线免费观看视频| 亚洲成人av一区二区| 欧洲生活片亚洲生活在线观看| 久久亚洲综合色一区二区三区| 日韩成人免费电影| 欧美视频一区在线观看| 亚洲激情第一区| 色综合激情五月| 国产精品国产自产拍高清av| 国产成人免费视频| 久久久www免费人成精品| 国内精品第一页| 国产午夜精品一区二区| 国产乱一区二区| 久久久久99精品一区| 成人精品小蝌蚪| 亚洲欧洲99久久| 色狠狠桃花综合| 日韩高清一区二区| 精品国产乱码久久| 成人av电影在线网| 亚洲欧美日本韩国| 91精品国模一区二区三区| 免费成人小视频| 国产精品久久777777| 色欧美乱欧美15图片| 午夜不卡在线视频| 欧美成人a∨高清免费观看| 高清日韩电视剧大全免费| 亚洲免费观看高清在线观看| 欧美亚洲国产一区二区三区va | 五月天中文字幕一区二区| 制服丝袜av成人在线看| 国产一区二区在线观看免费| 国产欧美精品一区| 91免费版在线看| 精品一区二区三区在线播放视频| 国产精品网友自拍| 5566中文字幕一区二区电影 | 久久99久久精品| 亚洲三级视频在线观看| 日韩精品在线看片z| 91免费版pro下载短视频| 久久精品国产亚洲aⅴ| 亚洲欧美日韩国产综合| 久久色中文字幕| 欧美精品丝袜久久久中文字幕| 成人一区二区三区视频在线观看| 五月综合激情网| 亚洲最大成人综合| 中文字幕乱码一区二区免费| 日韩欧美久久一区| 欧美日韩三级视频| 91丨porny丨国产入口| 粉嫩av一区二区三区在线播放 | 欧美日本韩国一区二区三区视频| 国产在线不卡视频| 久久精品国产澳门| 日本欧美久久久久免费播放网| 亚洲一级电影视频| 亚洲欧美日本在线| 一区二区三区精品久久久| 亚洲女与黑人做爰| 亚洲摸摸操操av| 亚洲色图丝袜美腿| 亚洲精品视频在线看| 亚洲丝袜精品丝袜在线| 亚洲欧美日韩小说| 一区二区在线免费| 午夜欧美2019年伦理| 婷婷久久综合九色国产成人| 亚洲成人综合视频| 日本最新不卡在线| 久久99精品国产麻豆婷婷| 免费高清不卡av| 国产成人免费av在线| 99精品久久久久久| 91久久免费观看| 91精品在线观看入口| 精品国产1区二区| 欧美α欧美αv大片| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 国产精品一二三区| 国产成人啪免费观看软件| 成人综合在线网站| 色素色在线综合| 精品精品国产高清a毛片牛牛 | 91女厕偷拍女厕偷拍高清| 91成人国产精品| 精品欧美一区二区久久| 色94色欧美sute亚洲线路一久| 不卡在线观看av| 7777精品久久久大香线蕉| 久久久亚洲午夜电影| 一区二区三区四区在线播放| 国产成人亚洲综合a∨婷婷| 成人高清视频免费观看| 成人开心网精品视频| 国产成人av影院| 国产一区二区在线电影| 国产一区欧美日韩| 国产成人在线看| 午夜日韩在线电影| 国产一区二区三区四| 色婷婷精品久久二区二区蜜臂av | 欧美日韩在线电影| 亚洲国产电影在线观看| 免费成人在线播放| 在线观看av一区| 国产精品久久久一区麻豆最新章节| 日本不卡1234视频| 成人av动漫网站| 在线精品视频小说1| 亚洲欧美综合色| 成人av在线观| 精品国产a毛片| 蜜臀av性久久久久蜜臀av麻豆 | 亚洲欧美一区二区在线观看| 国产一区二区三区四区五区入口 | 91精品国产一区二区三区| 一级日本不卡的影视| 成人av高清在线| 一区二区三区**美女毛片| av在线播放不卡| 亚洲久草在线视频| 欧美日韩久久一区二区| 亚洲国产视频a| 6080国产精品一区二区| 日韩精品电影一区亚洲| 欧美一区二区视频免费观看| 亚洲图片一区二区| 欧美高清hd18日本| 久久成人久久鬼色| 国产亚洲精品7777| 91视频一区二区| 亚洲一区二区欧美日韩| 4438成人网| 国产精品综合视频| 亚洲素人一区二区| 欧美一区二区三级| 国产ts人妖一区二区| 亚洲乱码一区二区三区在线观看| 欧美日韩国产综合一区二区| 男人操女人的视频在线观看欧美| 精品播放一区二区| 在线观看日产精品| 久草中文综合在线| 亚洲欧美日韩电影| 精品国产污污免费网站入口| 9人人澡人人爽人人精品| 日本伊人精品一区二区三区观看方式 | 综合中文字幕亚洲| 91精品国产综合久久精品| 国产精品影音先锋| 日欧美一区二区| 日韩一区中文字幕| 国产丝袜欧美中文另类| 欧美色爱综合网| 成人av资源网站| 国产在线精品一区在线观看麻豆| 亚洲自拍欧美精品| 国产精品亲子伦对白| 亚洲精品在线电影| 7777精品伊人久久久大香线蕉经典版下载| 成人国产精品免费网站| 黄色资源网久久资源365| 亚洲成人中文在线|