그림dijkstra 알고리즘 [데이터 구조 실천 보고서]
3237 단어 알고리즘 과 데이터 구조
실험 명칭: 실험 7 도 dijkstra 알고리즘
학 번: * * *
이름: gnosed
시험 날짜: 2017.12.23
실험 목적
최 단 경 로 를 구 하 는 Dijkstra 알고리즘 파악
2. 실험의 구체 적 인 내용
1. 실험 문제 1:
(1) 제목
프로그램 작성, Dijkstra 알고리즘 으로 그림 의 최 단 경로 구하 기
(2) 분석
메모리 구조:
설명:
알고리즘 프로 세 스:
1) 집합 V 에서 거리 값 이 가장 작은 정점 Vmin 을 선택 하여 집합 U 에 추가 (대각선 원소 값 을 1 로 변경 하여 표시 가능)
2) 위 에서 선택 한 Vmin 을 U 에 놓 을 때 만약 에 Vmin 이 Vo 가 다른 정점 V [i] 의 가장 짧 은 경로 에 있 는 정점 일 수 있 기 때문에 dist [i] 의 거리 값 이 줄 어 들 기 때문에 이때 min 값 에 따라 집합 V 의 각 정점 의 거리 값 을 조정 해 야 합 니 다. 만약 에 Vo 에서 Vi 까지 의 거리 값 이 원래 의 거리 값 보다 작 으 면 Vi 의 거리 값 dist [i]. length 를 수정 해 야 합 니 다. 그렇지 않 으 면 수정 하지 않 습 니 다.
3) 중복 1) 2) 보 에서 도달 할 수 있 는 모든 정점 이 집합 U 에 들 어 갈 때 까지 한다.
(3) 실험 코드
원본 코드:
#include
#include
#define Vextype int
#define Adjtype int
#define VN 6
#define MAX 1000
using namespace std;
struct GraphMatrix
{
Vextype vex[VN][VN];
Adjtype arc[VN][VN];
};
typedef struct{
Adjtype length;//shortest path
int prevex;//Vi
}Path;
Path dist[VN];
void init(GraphMatrix *pgraph,Path *dist)
{
dist[0].length=dist[0].prevex=0;
pgraph->arc[0][0]=1;// U, 1 U
for(int i=1;iarc[0][i];
if(dist[i].length!=MAX) dist[i].prevex=0;
else dist[i].prevex=-1;
}
}
void dijkstra(GraphMatrix *pgraph,Path *dist)
{
init(pgraph,dist);// ,U Vo
Adjtype minw;
int mv;
for(int i=1;iarc[j][j]!=1 && minw>dist[j].length){
minw=dist[j].length; mv=j;
}
if(mv==0) break;//Vo V-U ,
pgraph->arc[mv][mv]=1;// mv U
for(int i=1;iarc[i][i]!=1&&
dist[i].length>dist[mv].length+pgraph->arc[mv][i]){
dist[i].prevex=mv;
dist[i].length=dist[mv].length+pgraph->arc[mv][i];
}
}
}
}
int main()
{
GraphMatrix *G=new struct GraphMatrix;
for(int i=0;i>G->arc[i][j];
dijkstra(G,dist);
cout<>en;
k=en;
cout< Path;
while(1){
Path.push(dist[k].prevex);
k=dist[k].prevex;
if(!k) break;
}
while(!Path.empty()){
cout<";
Path.pop();
}
cout<
Input
0 50 101000 45 1000
1000 0 15 1000 5 1000
20 1000 0 15 1000 1000
1000 20 1000 0 35 1000
1000 1000 1000 30 0 1000
1000 1000 1000 3 1000 0
Output:
0, :3
:25
:0->2->3
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
데이터 구조의 링크 의 실현글 목록 소개 실현 1. 프로필 동적 배열, 스 택 과 대열 의 바 텀 은 모두 정적 배열 에 의존 하고 resize 로 고정 용량 문 제 를 해결한다.그리고 링크 는 진정한 동적 데이터 구조 이다 2. 실현...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.