国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

實(shí)驗(yàn)六 基于 Dijsktra 算法的最短路徑求解

這篇具有很好參考價(jià)值的文章主要介紹了實(shí)驗(yàn)六 基于 Dijsktra 算法的最短路徑求解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

實(shí)驗(yàn)六 基于Dijsktra算法的最短路徑求解
一、實(shí)驗(yàn)?zāi)康?br> 1.掌握?qǐng)D的鄰接矩陣表示法,掌握采用鄰接矩陣表示法創(chuàng)建圖的算法。
2.掌握求解最短路徑的 Dijsktra 算法。

二、實(shí)驗(yàn)內(nèi)容
一張地圖包括 n 個(gè)城市,假設(shè)城市間有 m 條路徑(有向圖),每條路徑的長(zhǎng)度
已知。給定地圖的一個(gè)起點(diǎn)城市和終點(diǎn)城市,利用 Dijsktra 算法求出起點(diǎn)到終
點(diǎn)之間的最短路徑

三、實(shí)驗(yàn)實(shí)習(xí)設(shè)備及開(kāi)發(fā)環(huán)境
Visual studio 2022
四.實(shí)驗(yàn)實(shí)習(xí)過(guò)程步驟(注意是主要關(guān)鍵步驟,不是所有步驟,適當(dāng)文字+截圖說(shuō)明)
Function1:初始化圖,將結(jié)構(gòu)體里面的節(jié)點(diǎn)數(shù)和邊數(shù)都輸入,然后根據(jù)路徑間的關(guān)系,對(duì)鄰接矩陣進(jìn)行填充,如果在兩個(gè)節(jié)點(diǎn)間有路徑,則在對(duì)應(yīng)的鄰接矩陣中修改權(quán)重(首先要將鄰接矩陣初始化,就是將所有的全部變成無(wú)窮大)。因?yàn)轭}目中是有向圖,所以不需要將對(duì)稱(chēng)的節(jié)點(diǎn)也修改,如果是無(wú)向圖,就需要將對(duì)稱(chēng)的也修改。
實(shí)驗(yàn)六 基于 Dijsktra 算法的最短路徑求解,數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn),算法

Funtion2:Dijkstra算法。從起點(diǎn)開(kāi)始,建立一個(gè)數(shù)組來(lái)存儲(chǔ)節(jié)點(diǎn)是否訪問(wèn),一個(gè)數(shù)據(jù)記錄節(jié)點(diǎn)離各點(diǎn)的距離,還有一個(gè)來(lái)記錄最短路徑。首先,從起點(diǎn)開(kāi)始,將起點(diǎn)下標(biāo)加入到最短路徑數(shù)組里面,到個(gè)點(diǎn)距離首先設(shè)置為0,變?yōu)橐呀?jīng)訪問(wèn)。然后依次訪問(wèn)有路徑的節(jié)點(diǎn),選擇路徑最小的節(jié)點(diǎn),然后對(duì)這個(gè)節(jié)點(diǎn),進(jìn)行看看,是否加了這個(gè)節(jié)點(diǎn)后,這個(gè)節(jié)點(diǎn)到其他節(jié)點(diǎn)的路徑是否變短了,如果有那么就更新路徑。然后一直重復(fù),直到訪問(wèn)完所有的節(jié)點(diǎn)。
實(shí)驗(yàn)六 基于 Dijsktra 算法的最短路徑求解,數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn),算法
實(shí)驗(yàn)六 基于 Dijsktra 算法的最短路徑求解,數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn),算法

五.實(shí)驗(yàn)實(shí)習(xí)結(jié)果及分析

實(shí)驗(yàn)六 基于 Dijsktra 算法的最短路徑求解,數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn),算法
實(shí)驗(yàn)六 基于 Dijsktra 算法的最短路徑求解,數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn),算法
實(shí)驗(yàn)六 基于 Dijsktra 算法的最短路徑求解,數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn),算法

實(shí)驗(yàn)結(jié)果成功。
六.實(shí)驗(yàn)遇到的問(wèn)題及解決辦法,實(shí)驗(yàn)心得體會(huì)及對(duì)此實(shí)驗(yàn)的意見(jiàn)或建議(有就寫(xiě),無(wú)可不寫(xiě))。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-802298.html

#include <stdio.h>
#include <stdlib.h>
#define MAX 99999
#define MAXVEX 100
#define true 1
#define false 0

int Path[MAXVEX];
int S[MAXVEX];
int D[MAXVEX];

typedef char Vexstype;
typedef int Arctype;

typedef struct Graph
{
	Vexstype vex[MAXVEX];//頂點(diǎn)
	Arctype arc[MAXVEX][MAXVEX];//鄰接矩陣
	int vexnum, arcnum;//頂點(diǎn)和邊數(shù)
}Graph;

int locatenum(Graph* city, char citynum)
{
	int i;
	for (i = 0; i < city->vexnum; i++)
	{
		if (citynum == city->vex[i])
		{
			return i;
		}
	}
}
int  Init(Graph* city,char *start,char *end)
{
	int i;
	int j;
	int  weight;
	char city1, city2;
	printf("請(qǐng)輸入城市個(gè)數(shù)和路徑條數(shù)\n");
	scanf("%d %d", &city->vexnum,&city->arcnum);
	fflush(stdin);
	if (city->vexnum == 0 || city->arcnum == 0)
	{
		return 0;
	}
	printf("請(qǐng)輸入城市名\n");
	fflush(stdin);
	for (i = 0; i < city->vexnum; i++)
	{
		scanf(" %c", &city->vex[i]);
	}
	
	for (i = 0; i < city->vexnum; i++)
	{
		for (j = 0; j < city->vexnum; j++)
		{
			city->arc[i][j] = MAX;
		}
		
	}
	fflush(stdin);
	printf("請(qǐng)輸入路徑\n");
	for (i = 0; i < city->arcnum; i++)
	{
		scanf(" %c %c %d", &city1, &city2, &weight);
		fflush(stdin);
		city->arc[locatenum(city, city1)][locatenum(city, city2)] = weight;
	}
	fflush(stdin);
	printf("請(qǐng)輸入起點(diǎn)和終點(diǎn)\n");
	scanf(" %c %c", &(*start), &(*end));

	return 1;
}

void dijikstra(Graph* city, char start, char end)
{
	int start_num = locatenum(city, start);
	int i;
	int min = MAX;
	for (i = 0; i < city->vexnum; i++)
	{
		S[i] = false;
		D[i] = city->arc[start_num][i];
		if (D[i] < MAX)
		{
			Path[i] = start_num;
		}
		else
		{
			Path[i] = -1;
		}
	}
	S[start_num] = true;
	D[start_num] = 0;

	int other;
	int min_num=i;
	for (i = 1; i < city->vexnum; i++)
	{
		min = MAX;
		for (other = 0; other < city->vexnum; other++)
		{
			if (S[other] == false && D[other] < min)
			{
				min = D[other];
				min_num = other;
			}
		}
		S[min_num] = true;
		for (other = 0; other < city->vexnum; other++)
		{
			if (S[other] == false && (D[min_num] + city->arc[min_num][other] < D[other]))
			{
				D[other] = D[min_num] + city->arc[min_num][other];
				Path[other] = min_num;
			}
		}
	}

}

void printPath(Graph* city, int end_num)
{
	if (Path[end_num] != -1)
	{
		printPath(city, Path[end_num]);
	}
	printf("%c ", city->vex[end_num]);
}
void findend(Graph* city, char end)
{
	int end_num = locatenum(city, end);
	printf("最短長(zhǎng)度為%d\n", D[end_num]);
	int i;
	fflush(stdin); 
	printf("最短路徑為\n");
	printPath(city, end_num);
	printf("\n");
}
int main()
{
	Graph city;
	int vexnum, arcnum;
	char start, end;
	while (Init(&city,&start,&end))
	{
		dijikstra(&city, start, end);
		findend(&city, end);

	}


	return 0;
}

到了這里,關(guān)于實(shí)驗(yàn)六 基于 Dijsktra 算法的最短路徑求解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)(12)Dijkstra算法JAVA版:圖的最短路徑問(wèn)題

    數(shù)據(jù)結(jié)構(gòu)(12)Dijkstra算法JAVA版:圖的最短路徑問(wèn)題

    目錄 12.1.概述 12.1.1.無(wú)權(quán)圖的最短路徑 ?12.1.2.帶權(quán)圖的最短路徑 1.單源最短路徑 2.多源最短路徑 12.2.代碼實(shí)現(xiàn) 無(wú)權(quán)圖的最短路徑,即最少步數(shù),使用BFS+貪心算法來(lái)求解最短路徑,比較好實(shí)現(xiàn),此處不做展開(kāi)討論。 有權(quán)圖的最短路徑,不考慮權(quán)重為負(fù)數(shù)的情況,因?yàn)闄?quán)重為負(fù)

    2024年02月06日
    瀏覽(23)
  • java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode1091. 二進(jìn)制矩陣中的最短路徑

    java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode1091. 二進(jìn)制矩陣中的最短路徑

    java數(shù)據(jù)結(jié)構(gòu)與算法刷題目錄(劍指Offer、LeetCode、ACM)-----主目錄-----持續(xù)更新(進(jìn)不去說(shuō)明我沒(méi)寫(xiě)完): https://blog.csdn.net/grd_java/article/details/123063846 雙分裂蛇:是求二維表中從起點(diǎn)到終點(diǎn)的經(jīng)典思路(也是求無(wú)權(quán)圖的最短路徑問(wèn)題的經(jīng)典解法)。創(chuàng)建兩條分裂蛇,分別從起點(diǎn)和

    2024年04月26日
    瀏覽(97)
  • 數(shù)據(jù)結(jié)構(gòu)——圖的最短路徑

    數(shù)據(jù)結(jié)構(gòu)——圖的最短路徑

    在圖中,求兩個(gè)不同頂點(diǎn)間的不同路徑中,邊的權(quán)值和最小的那條路徑。這條路徑就叫做 最短路徑(Shortest Path) ,第一個(gè)頂點(diǎn)叫做 源點(diǎn)(Source) ,最后一個(gè)頂點(diǎn)叫做 終點(diǎn)(Destination) 。 單源最短路徑問(wèn)題: 從某固定源點(diǎn)出發(fā),求其到所有其他頂點(diǎn)的最短路徑。 ? ? ? ? 包

    2024年02月03日
    瀏覽(21)
  • Java高階數(shù)據(jù)結(jié)構(gòu) & 圖的最短路徑問(wèn)題

    Java高階數(shù)據(jù)結(jié)構(gòu) & 圖的最短路徑問(wèn)題

    圖的最短路徑問(wèn)題! 圖的基礎(chǔ)知識(shí)博客:傳送門(mén) 最短路徑問(wèn)題: 從在帶權(quán)圖的某一頂點(diǎn)出發(fā),找出一條通往另一頂點(diǎn)的最短路徑, 最短也就是沿路徑各邊的權(quán)值總 和達(dá)到最小 。 一共會(huì)講解三種算法 Dijkstra算法【單源最短路徑】 Bellman-Ford算法【單源最短路徑】 改進(jìn):SPF

    2024年02月04日
    瀏覽(28)
  • 【Java高階數(shù)據(jù)結(jié)構(gòu)】圖的最短路徑問(wèn)題

    【Java高階數(shù)據(jù)結(jié)構(gòu)】圖的最短路徑問(wèn)題

    圖的最短路徑問(wèn)題! 圖的基礎(chǔ)知識(shí)博客:傳送門(mén) 最短路徑問(wèn)題: 從在帶權(quán)圖的某一頂點(diǎn)出發(fā),找出一條通往另一頂點(diǎn)的最短路徑, 最短也就是沿路徑各邊的權(quán)值總 和達(dá)到最小 。 一共會(huì)講解三種算法 Dijkstra算法【單源最短路徑】 Bellman-Ford算法【單源最短路徑】 改進(jìn):SPF

    2024年02月08日
    瀏覽(24)
  • 算法:關(guān)于圖的最短路徑算法

    算法:關(guān)于圖的最短路徑算法

    本篇總結(jié)的是圖當(dāng)中的最短路徑算法 單源最短路徑問(wèn)題:給定一個(gè)圖 G = ( V , E ) G=(V,E)G=(V,E) ,求源結(jié)點(diǎn) s ∈ V s∈Vs∈V 到圖中每個(gè)結(jié)點(diǎn) v ∈ V v∈Vv∈V 的最短路徑。 Dijkstra 算法就適用于解決帶權(quán)重的有向圖上的單源最短路徑問(wèn)題,同時(shí)算法要求圖中所有邊的權(quán)重非負(fù)。一

    2024年02月19日
    瀏覽(21)
  • matlab算法模型——圖的最短路徑和距離

    matlab算法模型——圖的最短路徑和距離

    目錄 一、前言 二、最短路徑 1.sqarse創(chuàng)建稀疏矩陣 ??2.有向圖的最短路徑 ? ? ? ? 使用graphallshortestpaths函數(shù) 使用dijkstra.ma函數(shù)(直接引用) 3.無(wú)向圖的最短路徑 使用函數(shù)graphallshortestpaths(2021的版本不能用了) 使用shortestpath函數(shù) 三、未解決的問(wèn)題 動(dòng)態(tài)規(guī)劃——求解某類(lèi)問(wèn)題

    2024年02月04日
    瀏覽(20)
  • 算法課程設(shè)計(jì)--A*算法解決特定條件下的最短路徑問(wèn)題

    算法課程設(shè)計(jì)--A*算法解決特定條件下的最短路徑問(wèn)題

    ? ? ? ? ?LOL 峽谷地圖最優(yōu)路徑規(guī)劃 ? ? ? ?以下問(wèn)題的計(jì)算,按照該地圖的基本規(guī)則來(lái)進(jìn)行在該地圖中分布著各種形狀不規(guī)則的障礙區(qū)域環(huán)境。整個(gè)地圖模型,可以根據(jù)需求進(jìn)行自行簡(jiǎn)化。 問(wèn)題一:在任意起點(diǎn)與終點(diǎn)之間,規(guī)劃一條最短路徑。 問(wèn)題二:當(dāng)你擁有一個(gè)閃現(xiàn)

    2024年02月10日
    瀏覽(39)
  • DS圖—圖的最短路徑(無(wú)框架)迪杰斯特拉算法

    目錄 題目描述 AC代碼 題目描述 給出一個(gè)圖的鄰接矩陣,輸入頂點(diǎn)v,用迪杰斯特拉算法求頂點(diǎn)v到其它頂點(diǎn)的最短路徑。 輸入 第一行輸入t,表示有t個(gè)測(cè)試實(shí)例 第二行輸入頂點(diǎn)數(shù)n和n個(gè)頂點(diǎn)信息 第三行起,每行輸入鄰接矩陣的一行,以此類(lèi)推輸入n行 第i個(gè)結(jié)點(diǎn)與其它結(jié)點(diǎn)如果

    2023年04月08日
    瀏覽(21)
  • Dijkstra算法——單源最短路徑(指定一個(gè)節(jié)點(diǎn)(源點(diǎn))到其余各個(gè)頂點(diǎn)的最短路徑)

    Dijkstra算法——單源最短路徑(指定一個(gè)節(jié)點(diǎn)(源點(diǎn))到其余各個(gè)頂點(diǎn)的最短路徑)

    國(guó)慶期間,小明打算從1號(hào)城市出發(fā),在五天假期中分別去往不同的城市(2,3,4,5,6)旅游,為減輕負(fù)擔(dān),他想要知道1號(hào)城市到各個(gè)城市之間的最短距離。 現(xiàn)在需要設(shè)計(jì)一種算法求得源點(diǎn)到任意一個(gè)城市之間的最短路徑。該問(wèn)題的求解也被稱(chēng)為“單源最短路徑”。 在所有

    2024年02月03日
    瀏覽(31)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包