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

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

?? dijkstra.cpp

?? dijkstra算法的鏈表實現(xiàn),另外需要include一個頭文件,稍后上傳
?? CPP
字號:

/******************************************************************************************************************************/
/*                                    實現(xiàn)尋找兩點間最短帶權(quán)路徑的Dijkstra算法                                                */
/*                                  使用鄰接矩陣表示帶權(quán)圖,并用鏈表儲存矩陣數(shù)據(jù)                                              */  
/******************************************************************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "link_list.h"


float element(List *list,int row,int col);
int contd(List *D,int node);
float neardist(int *lastnode,List *adjacent,List *D,int i);
int allcontd(List *adjacent,List *D);
void quit();
void prtpath(List *path,int i,int sersp);
int searchlast(List *path,int i);
void showmsg();


void main()
{
	int i = 0,j,flag = 0,dim,sersp,lastnode = -1;
	float temp,least,temp1,temp2;
	char c = ' ';

	List adjacent;
	List D;
	List path;

	CreateList(&adjacent);
	CreateList(&D);
	CreateList(&path);
	FILE *fp;

	showmsg();

	if((fp = fopen("adjacent.dat","r")) == NULL)
	{
		printf("打開文件錯誤!\n");
		quit();
	}

	while (!feof(fp))                                                                                 //從文件讀取鄰接矩陣數(shù)據(jù)
	{
		fscanf(fp,"%f,",&temp);
		InsertList(temp,i++,&adjacent);
	}

	fclose(fp);

	for(j = 0;j * j <= i;j++)
		if (i == j * j)
			flag++;

	if(!flag)
	{
		printf("鄰接矩陣必須是方陣,請重新輸入!\n");
		quit();
	}
	
	dim = sqrt(i);
	flag=0;

	for(i = 0;i < dim - 1;i++)
		for(j = i + 1;j < dim;j++)
			if(GetList(i * dim + j,&adjacent)!=GetList(j * dim + i,&adjacent))
				flag++;

	if(flag)
	{
		printf("鄰接矩陣必須是對稱矩陣,請重新輸入!\n");
		quit();
	}

	printf("輸入源結(jié)點 P 的編號:\n");
	scanf("%d",&sersp);

	while(sersp > dim || sersp <= 0)
	{
		printf("超出范圍,重新輸入:\n");
		scanf("%d",&sersp);
	}

	sersp--;

	for(i = 0;i < dim;i++)
		InsertList((i == sersp)?0:(-1),i,&D);

	flag=0;

	while(!allcontd(&adjacent,&D))                                                                //尋找鄰接到源點的最短路徑長度
	{
		for(i = 0;i < dim;i++)
			if(!contd(&D,i))
			{
				temp1 = temp2;
				if((temp2 = neardist(&lastnode,&adjacent,&D,i)) == -2)
					temp2 = temp1;
				if(flag)
					temp2 = (temp1 < temp2) ? temp1 : temp2;
				if(neardist(&lastnode,&adjacent,&D,i) != -2)
					flag = 1;
			}
		if(flag)
		{
			least = temp2;
			flag = 0;
			for(j = 0;j < dim;j++)
			{
				if(neardist(&lastnode,&adjacent,&D,j) == least)
				{
					SetPosition(j,&D) -> entry = least;
					if(lastnode != -1)
					{
						InsertList(j,0,&path);
						InsertList(lastnode,0,&path);
					}
				}
			}
		}
	}

	for(i = 0;i < dim;i++)
		if(i != sersp)
		{
			if((int)GetList(i,&D) != -1)
			{
				printf("節(jié)點 %d 到節(jié)點 %d 的最短帶權(quán)路徑長度是: %g.\n",sersp + 1,i + 1,GetList(i,&D));
				prtpath(&path,i,sersp);
			}
			else
				printf("節(jié)點 %d 到節(jié)點 %d 沒有路連接.\n",sersp + 1,i + 1);
		}

	quit();
}

/**********************************************返回鄰接矩陣中某個元素的值*****************************************************/
float element(List *list,int row,int col)
{
	int dim;
	dim = sqrt(ListSize (list));
	return(GetList(row * dim + col,list));
}

/*******************************************判斷給定的節(jié)點是否已鄰接到源節(jié)點P*************************************************/
int contd(List *D,int node)
{
	return((int)GetList(node,D) >= 0);
}

/************************************計算給定節(jié)點到源節(jié)點P的最短路徑,如果不存在那返回 -2 ************************************/
float neardist(int *lastnode,List *adjacent,List *D,int i)
{
	int dim,j,flag = 0;
	float temp1,temp2 = -2;
	dim = ListSize(D);
	*lastnode=-1;

	for(j = 0;j < dim;j++)
		if(contd(D,j))
			if((int)element(adjacent,i,j) != -1)
			{
				temp1 = temp2;
				temp2 = element(adjacent,i,j) + GetList(j,D);
				if(flag)
				{
					if (temp2 < temp1)
						*lastnode = j;
					temp2 = (temp1 < temp2) ? temp1 : temp2;
				}
				else
					*lastnode = j;
				flag = 1;
			}

	return temp2;
}

/***************************************判斷是否所有能夠連接的的節(jié)點都已連接到源節(jié)點P*****************************************/
int allcontd(List *adjacent,List *D)
{
	int i,flag = 0,lastnode;

	for(i = 0;i < ListSize(D);i++)
		if(!(contd(D,i)))
			if((int)neardist(&lastnode,adjacent,D,i) != -2)
			{
				flag = 1;
				break;
			}

	return !flag;
}

/***********************************************尋找源點P到已知節(jié)點經(jīng)過的路徑*************************************************/
void prtpath(List *path,int i,int sersp)
{
	int j = i;
	List way;
	CreateList(&way);
	InsertList(sersp,0,&way);
	while(searchlast(path,j) != sersp)
	{
		InsertList(searchlast(path,j),1,&way);
		j = searchlast(path,j);
	}
	printf("    路徑是: %d",sersp + 1);
	for(j = 1;j < ListSize(&way);j++)
		printf(" -> %d",(int)GetList(j,&way) + 1);
	printf(" -> %d\n",i + 1);


}

/************************************************尋找已知結(jié)點的上一個節(jié)點***************************************************/
int searchlast(List *path,int i)
{
	int position;
	for(position = 1;position < ListSize(path);position += 2)
	{
		if(GetList(position,path) == i)
			break;
	}
	return (int)GetList(position - 1,path);
}

void quit()
{
	char c;
	while (c != '\n')
		c = getchar();
	c = getchar();
	exit(1);
}

void showmsg()
{
	printf("********本程序用Dijkstra算法尋找已知圖中從源點P到其他各點的最短帶權(quán)路徑*********\n");
	printf("請將圖的鄰接矩陣輸入文件adjacent.dat,用-1表示沒有連接,然后執(zhí)行程序.\n\n\n");
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美xxxxx裸体时装秀| 亚洲成人动漫在线免费观看| 精品亚洲porn| 欧美精品一区二区精品网| 国内外成人在线| 国产午夜一区二区三区| 国产精品456| 亚洲欧洲日韩综合一区二区| 色婷婷激情久久| 亚洲综合精品自拍| 欧美高清视频一二三区| 久久99久久99精品免视看婷婷 | 这里只有精品视频在线观看| 无码av免费一区二区三区试看 | 视频在线观看国产精品| 欧美xxxxxxxxx| proumb性欧美在线观看| 亚洲主播在线观看| 亚洲精品一区在线观看| heyzo一本久久综合| 亚洲一区二区四区蜜桃| 日韩欧美一区在线| av电影天堂一区二区在线| 一区二区欧美国产| 欧美videos大乳护士334| youjizz国产精品| 日韩国产一二三区| 欧美激情一区二区在线| 欧美日韩一二三区| 国产精品白丝av| 亚洲成人高清在线| 国产精品毛片高清在线完整版| 色婷婷激情综合| 国产另类ts人妖一区二区| 亚洲一区在线观看网站| 久久综合狠狠综合久久综合88| 99re8在线精品视频免费播放| 午夜精品一区二区三区电影天堂 | 在线观看三级视频欧美| 久久成人综合网| 亚洲欧洲综合另类在线| 日韩精品一区在线| 欧美亚洲一区二区在线| 国产91高潮流白浆在线麻豆 | 亚洲国产精品二十页| 在线电影一区二区三区| 91在线视频在线| 美女一区二区在线观看| 亚洲国产日韩一级| 亚洲国产精品黑人久久久| 欧美电视剧免费观看| 91成人在线精品| 成人av在线资源网| 国产自产高清不卡| 天天色 色综合| 欧美一区二区三区视频在线| 国产成人午夜电影网| 亚洲高清不卡在线观看| 中文字幕中文在线不卡住| 日韩一区二区高清| 欧美影院一区二区三区| 99精品在线观看视频| 国产伦精品一区二区三区免费迷| 视频一区二区三区在线| 一区二区三区.www| 亚洲免费在线视频一区 二区| 久久久精品国产免费观看同学| 日韩一区二区三区三四区视频在线观看| 色综合天天综合色综合av | 丝袜美腿成人在线| 一区二区三区成人| 一级特黄大欧美久久久| 亚洲靠逼com| 《视频一区视频二区| 中文字幕av免费专区久久| 国产亚洲精品bt天堂精选| 精品国产一区二区国模嫣然| 日韩欧美资源站| 欧美大度的电影原声| 9191久久久久久久久久久| 欧美三级在线播放| 欧美日韩精品一区二区在线播放| 色老汉av一区二区三区| 在线观看免费一区| 欧美美女直播网站| 欧美老女人在线| 日韩午夜在线影院| 久久综合资源网| 国产偷国产偷精品高清尤物| 中文成人av在线| 亚洲视频在线一区| 一个色综合网站| 天堂va蜜桃一区二区三区| 久久99精品国产.久久久久久| 精品中文av资源站在线观看| 国产成人精品影视| 99精品黄色片免费大全| 欧美在线视频你懂得| 欧美一卡2卡三卡4卡5免费| 精品黑人一区二区三区久久| 中文字幕精品一区二区精品绿巨人 | 欧美三级电影网站| 日韩亚洲欧美一区| 欧美韩日一区二区三区四区| 国产精品动漫网站| 五月天激情小说综合| 久久av老司机精品网站导航| 成人免费毛片嘿嘿连载视频| 在线观看日韩高清av| 欧美电影免费观看高清完整版| 国产日韩影视精品| 亚洲五码中文字幕| 国产精品正在播放| 欧美网站大全在线观看| 精品福利在线导航| 亚洲精选视频免费看| 蜜臀av国产精品久久久久| 成人综合在线视频| 8x8x8国产精品| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 91免费看`日韩一区二区| 欧美二区三区的天堂| 国产精品免费久久久久| 亚洲第一二三四区| 国产91精品一区二区| 蜜桃av一区二区在线观看| 成人激情免费电影网址| 3d成人h动漫网站入口| 久久久久久久久久电影| 视频一区在线视频| 成人的网站免费观看| 精品少妇一区二区三区在线播放 | 色婷婷综合久久| 久久综合久久久久88| 亚洲欧美偷拍卡通变态| 国产美女精品一区二区三区| 91啪亚洲精品| 欧美极品aⅴ影院| 午夜影视日本亚洲欧洲精品| 国产一区二区三区久久久| a亚洲天堂av| 精品三级在线观看| 亚洲国产欧美在线| 不卡的电影网站| 久久夜色精品一区| 亚洲成在人线在线播放| 97se亚洲国产综合自在线 | 成人高清免费在线播放| 欧美一级高清片| 视频一区国产视频| 91激情五月电影| 亚洲精品免费在线| 日日摸夜夜添夜夜添国产精品| 一本色道久久综合亚洲aⅴ蜜桃| 久久精品亚洲麻豆av一区二区| 午夜精品视频在线观看| 欧美艳星brazzers| 亚洲欧美一区二区三区极速播放| 国产成人免费在线| 日韩欧美激情四射| 久久精品99国产国产精| 色综合久久综合网97色综合| 亚洲丝袜美腿综合| 色网综合在线观看| 国产精品三级视频| 99久久婷婷国产综合精品| 亚洲精品在线电影| 国产成人a级片| 日韩精品一区二区三区四区视频| 久久精品99久久久| 26uuu亚洲| 久久不见久久见免费视频1| 久久色在线观看| 久久99精品国产麻豆婷婷洗澡| 久久尤物电影视频在线观看| 青娱乐精品在线视频| 精品欧美一区二区在线观看| 精品一区二区三区日韩| 精品国精品国产| 国产成人高清视频| 日本一区二区高清| 色噜噜狠狠色综合欧洲selulu| 日韩美女视频一区二区| 欧美亚洲一区三区| 日本成人超碰在线观看| 日韩一区二区三区av| 国产99久久精品| 欧美国产精品专区| 色婷婷综合久久| 亚洲色欲色欲www| 欧美日韩一区二区在线观看视频| 日韩国产欧美三级| 精品久久久影院| 99re免费视频精品全部| 伊人色综合久久天天人手人婷| 91精品国产91久久综合桃花| 国产老妇另类xxxxx| 国产精品伦一区二区三级视频| 91极品视觉盛宴| 美女国产一区二区|