最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++簡(jiǎn)單實(shí)現(xiàn)Dijkstra算法

 更新時(shí)間:2020年05月27日 15:13:45   作者:銘霏  
這篇文章主要為大家詳細(xì)介紹了C++簡(jiǎn)單實(shí)現(xiàn)Dijkstra算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C++簡(jiǎn)單實(shí)現(xiàn)Dijkstra算法的具體代碼,供大家參考,具體內(nèi)容如下

// Dijkstra.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。
//
 
#include "stdafx.h"
#include <iostream>
#include <stack>
#define MAX_VALUE 1000
using namespace std;
 
struct MGraph
{
 int *edges[MAX_VALUE];
 int iVertexCount, iEdageCount;
};
void ReadDate(MGraph *mGraph, int *iBegin, int *iEnd);
void Dijkstra(MGraph *mGraph, int *pArrDis, int *pArrPath, int iBegin);
void PrintResult(int *pArrDis, int *pArrPath, int iBegin, int iEnd);
 
int main()
{
 int iBegin, iEnd;
 int *pArrPath = new int[MAX_VALUE];
 int *pArrDis = new int[MAX_VALUE];
 MGraph mGraph;
 for (int i = 0; i < MAX_VALUE; i++){
 mGraph.edges[i] = new int[MAX_VALUE];
 }
 ReadDate(&mGraph, &iBegin, &iEnd);
 Dijkstra(&mGraph, pArrDis, pArrPath, iBegin);
 PrintResult(pArrDis,pArrPath, iBegin, iEnd);
 system("pause");
 return 0;
}
 
void ReadDate(MGraph *mGraph, int *iBegin, int *iEnd){
 cout << "請(qǐng)輸入頂點(diǎn)數(shù)量" << endl;
 cin >> mGraph->iVertexCount;
 cout << "請(qǐng)輸入鄰接矩陣數(shù)據(jù):" << endl;
 for (int iRow = 1; iRow <= mGraph->iVertexCount; iRow++){
 for (int iCol = 1; iCol <= mGraph->iVertexCount; iCol++){
  cin >> mGraph->edges[iRow][iCol];
 }
 }
 
 //cout << "請(qǐng)輸入頂點(diǎn)數(shù)和邊數(shù)" << endl;
 //cin >> mGraph->iVertexCount >> mGraph->iEdageCount;
 //for (int iRow = 1; iRow <= mGraph->iVertexCount; iRow++){
 // for (int iCol = 1; iCol <= mGraph->iVertexCount; iCol++){
 // mGraph->edges[iRow][iCol] = -1;
 // }
 //}
 //cout << "請(qǐng)輸入連通邊及權(quán)重" << endl;
 //int iRow, iCol, iWeight;
 //for (int i = 1; i <= mGraph->iEdageCount; i++){
 // cin >> iRow >> iCol >> iWeight;
 // mGraph->edges[iRow][iCol] = iWeight;
 //}
 
 cout << "請(qǐng)輸入查詢(xún)的起點(diǎn)和終點(diǎn)" << endl;
 cin >> *iBegin >> *iEnd;
}
 
void Dijkstra(MGraph *mGraph, int *pArrDis, int *pArrPath, int iBegin){
 int iMin;
 int bArrVisited[MAX_VALUE];
 memset(bArrVisited, false, sizeof(bArrVisited));
 for (int i = 1; i <= mGraph->iVertexCount; i++){
 pArrPath[i] = -1;
 mGraph->edges[i][i] = 0;
 pArrDis[i] = mGraph->edges[iBegin][i] != -1 ? mGraph->edges[iBegin][i] : INT_MAX;
 }
 int iNewCost;
 int iSelected = iBegin;
 
 for (int i = 1; i <= mGraph->iVertexCount; i++){
 int iPre = iSelected;
 iMin = INT_MAX;
 for (int j = 1; j <= mGraph->iVertexCount; j++){
  if (!bArrVisited[j] && pArrDis[j] < iMin){
  iMin = pArrDis[j];
  iSelected = j;
  }
 }
 for (int j = 1; j <= mGraph->iVertexCount; j++){
  iNewCost = pArrDis[iSelected] != -1 && mGraph->edges[iSelected][j] != -1 ? pArrDis[iSelected] + mGraph->edges[iSelected][j] : INT_MAX;
  if (!bArrVisited[j] && iNewCost < pArrDis[j]){
  pArrPath[j] = iSelected;
  pArrDis[j] = iNewCost;
  //pArrPath[iSelected] = iSelected;
  }
 }
 //pArrPath[iSelected] = iPre;
 bArrVisited[iSelected] = true;
 }
}
 
void PrintResult(int *pArrDis, int *pArrPath, int iBegin, int iEnd){
 
 cout << "從" << iBegin << "開(kāi)始到" << iEnd << "的最短路徑長(zhǎng)度為";
 cout << pArrDis[iEnd] << endl;
 cout << "所經(jīng)過(guò)的最短路徑節(jié)點(diǎn)為:";
 
 stack<int> stackVertices;
 int k = iEnd;
 do{
 k = pArrPath[k];
 stackVertices.push(k);
 } while (k != pArrPath[k] && k != -1);
 cout << stackVertices.top()*-1;
 stackVertices.pop();
 
 unsigned int nLength = stackVertices.size();
 for (unsigned int nIndex = 0; nIndex < nLength; nIndex++)
 {
 cout << " -> " << stackVertices.top();
 stackVertices.pop();
 }
 cout << " -> " << iEnd << endl;
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語(yǔ)言實(shí)現(xiàn)QQ窗口抖動(dòng)功能

    C語(yǔ)言實(shí)現(xiàn)QQ窗口抖動(dòng)功能

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)QQ窗口抖動(dòng)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • C++文件關(guān)鍵詞快速定位出現(xiàn)的行號(hào)實(shí)現(xiàn)高效搜索

    C++文件關(guān)鍵詞快速定位出現(xiàn)的行號(hào)實(shí)現(xiàn)高效搜索

    這篇文章主要為大家介紹了C++文件關(guān)鍵詞快速定位出現(xiàn)的行號(hào)實(shí)現(xiàn)高效搜索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • C++內(nèi)存數(shù)據(jù)結(jié)構(gòu)與二進(jìn)制文件之間的序列化和反序列化方式

    C++內(nèi)存數(shù)據(jù)結(jié)構(gòu)與二進(jìn)制文件之間的序列化和反序列化方式

    這篇文章主要介紹了C++內(nèi)存數(shù)據(jù)結(jié)構(gòu)與二進(jìn)制文件之間的序列化和反序列化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C++詳細(xì)分析引用的使用及其底層原理

    C++詳細(xì)分析引用的使用及其底層原理

    引用是C++一個(gè)很重要的特性,顧名思義是某一個(gè)變量或?qū)ο蟮膭e名,對(duì)引用的操作與對(duì)其所綁定的變量或?qū)ο蟮牟僮魍耆葍r(jià),這篇文章主要給大家總結(jié)介紹了C++中引用的相關(guān)知識(shí)點(diǎn),需要的朋友可以參考下
    2022-04-04
  • C++11中的變長(zhǎng)模板的示例詳解

    C++11中的變長(zhǎng)模板的示例詳解

    C++中的變長(zhǎng)模板真的是又臭又長(zhǎng),晦澀難懂,但是確實(shí)有些STL庫(kù)就是這么寫(xiě)的。本文就來(lái)和大家聊聊C++11中這些變長(zhǎng)模塊的使用,需要的可以參考一下
    2023-02-02
  • windows?使用ffmpeg?.a靜態(tài)庫(kù)讀取Wav音頻并保存PCM的方法

    windows?使用ffmpeg?.a靜態(tài)庫(kù)讀取Wav音頻并保存PCM的方法

    這篇文章主要介紹了windows?使用ffmpeg?.a靜態(tài)庫(kù)讀取Wav音頻并保存PCM,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-02-02
  • C語(yǔ)言實(shí)現(xiàn)掃雷游戲詳細(xì)代碼實(shí)例

    C語(yǔ)言實(shí)現(xiàn)掃雷游戲詳細(xì)代碼實(shí)例

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)掃雷游戲詳細(xì)代碼實(shí)例,有感興趣的同學(xué)可以借鑒參考下
    2021-02-02
  • C語(yǔ)言實(shí)現(xiàn)掃雷OvO(完整代碼)

    C語(yǔ)言實(shí)現(xiàn)掃雷OvO(完整代碼)

    相信大家都玩過(guò)掃雷游戲,因?yàn)樗?jīng)典了,今天我們用C語(yǔ)言來(lái)模擬實(shí)現(xiàn)掃雷游戲,結(jié)合示例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2022-04-04
  • 最新評(píng)論

    林芝县| 棋牌| 库车县| 萨迦县| 新干县| 宁德市| 泰州市| 合川市| 梁河县| 横峰县| 南昌县| 女性| 凤庆县| 柞水县| 东兰县| 青铜峡市| 永寿县| 岳阳市| 柏乡县| 那坡县| 奉新县| 民勤县| 昌乐县| 麻栗坡县| 武隆县| 景东| 华容县| 旬邑县| 建德市| 潜江市| 牙克石市| 攀枝花市| 鄂托克旗| 石渠县| 青河县| 灌南县| 百色市| 永川市| 锦屏县| 泾川县| 富民县|