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

使用鄰接矩陣實(shí)現(xiàn)有向圖最短路徑Dijkstra算法 題目編號(hào):1136

這篇具有很好參考價(jià)值的文章主要介紹了使用鄰接矩陣實(shí)現(xiàn)有向圖最短路徑Dijkstra算法 題目編號(hào):1136。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

題目描述

用鄰接矩陣存儲(chǔ)有向圖,實(shí)現(xiàn)最短路徑Dijkstra算法,圖中邊的權(quán)值為整型,頂點(diǎn)個(gè)數(shù)少于10個(gè)。

部分代碼提示:
#include
#include
using namespace std;

const int MaxSize = 10;
const int INF = 32767;

class MGraph
{
public:
MGraph(char a[], int n, int e);

void Dijkstra();

private:
char vertex[MaxSize];
int arc[MaxSize][MaxSize];
int vertexNum, arcNum;
};

MGraph::MGraph(char a[], int n, int e)
{
//write your code.

}

int Min(int dist[], int vertexNum)
{
//write your code.

}
void MGraph::Dijkstra()
{
//write your code.

}

int main()
{
int n = 0;
int e = 0;
cin >> n >> e;
char p[MaxSize];
int i = 0;

for (i=0; i<n; i++)
{
	cin >> p[i];
}

MGraph MG(p, n, e);

MG.Dijkstra();

return 0;

}

輸入描述

首先輸入圖中頂點(diǎn)個(gè)數(shù)和邊的條數(shù);
再輸入頂點(diǎn)的信息(字符型);
再輸入各邊及其權(quán)值。

輸出描述

依次輸出從編號(hào)為0的頂點(diǎn)開始的從小到大的所有最短路徑,每條路徑及其長(zhǎng)度占一行。

輸入樣例

5 7
A B C D E
0 1 6
0 2 2
0 3 1
1 2 4
1 3 3
2 4 6
3 4 7

輸出樣例

AD 1
AC 2
AB 6
ADE 8
內(nèi)存閥值:50240K 耗時(shí)閥值:5000MS文章來源地址http://www.zghlxwxcb.cn/news/detail-428824.html

代碼

#include <iostream>
#include <string>
using namespace std;
 
const int MaxSize = 10;
const int INF = 32767;
 
class MGraph
{
public:
	MGraph(string a[], int n, int e);
 
	void Dijkstra();
 
private:
	string vertex[MaxSize];
	int arc[MaxSize][MaxSize];
	int vertexNum, arcNum;
};
 
MGraph::MGraph(string a[], int n, int e)
{
	//1、賦值
	vertexNum = n;
	arcNum = e;
	//2、頂點(diǎn)表
	for (int i = 0; i < vertexNum; i++)
		vertex[i] = a[i];
	//3、邊表初始化
	for (int i = 0; i < vertexNum; i++)
		for (int j = 0; j < vertexNum; j++)
			arc[i][j] = INF;
	//4、邊表賦值
	int i = 0, j = 0, w = 0;
	for (int k = 0; k < arcNum; k++)
	{
		cin >> i >> j >> w;
		arc[i][j] = w;
		//arc[j][i] = w;//有方向的不用反復(fù)設(shè)置相同!?。?!掉坑了我淦!
	}
}
 
int Min(int dist[], int vertexNum)
{
	int min = INF;
	
	int pos = 0;
 
	for (int i = 0; i < vertexNum; i++)
	{
		if (dist[i] < min && dist[i] != 0)//!=0?:存入的頂點(diǎn)不需要遍歷
		{
			min = dist[i];
 
			pos = i;
		}
	}
	return pos;
}
 
void MGraph::Dijkstra()
{
	int v = 0;
	int i, k, num, dist[MaxSize];//權(quán)值表
	string path[MaxSize];//路徑表
	for (i = 0; i < vertexNum; i++)
	{
		dist[i] = arc[v][i];//v-表示當(dāng)前頂點(diǎn),i-表示這個(gè)頂點(diǎn)與其他頂點(diǎn)的邊的權(quán)值(希望屏幕前的你能理解)
 
		if (dist[i] != INF)//如果連通
			path[i] = vertex[v] + vertex[i];
		else
			path[i] = "";
	}
 
	dist[0] = 0;
	
	for (num = 1; num < vertexNum; num++)//不知道為什么=1?頂點(diǎn)表已經(jīng)在集合中了,所以不用遍歷
	{
		k = Min(dist, vertexNum);
		
		cout << path[k] <<' ' << dist[k];
 
		for (i = 0; i < vertexNum; i++)//更新最小權(quán)值表
		{
			if (dist[i] > dist[k] + arc[k][i])
			{
				dist[i] = dist[k] + arc[k][i];
 
				path[i] = path[k] + vertex[i];
			}
		}
		dist[k] = 0;//將k加入集合,為什么是0?因?yàn)?比其他路徑權(quán)值和都要小所以無法改變
	}
}
 
int main()
{
	int n = 0;
	int e = 0;
	cin >> n >> e;
	string p[MaxSize];
	int i = 0;
 
	for (i = 0; i < n; i++)
	{
		cin >> p[i];
	}
 
	MGraph MG(p, n, e);
 
	MG.Dijkstra();
 
	return 0;
}

到了這里,關(guān)于使用鄰接矩陣實(shí)現(xiàn)有向圖最短路徑Dijkstra算法 題目編號(hào):1136的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(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)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包