최 단 경로 (방향 도 있 음)
2513 단어 코드
순서대로 출력 합 니 다. 해당 경 로 를 저 장 했 을 뿐 순서대로 저장 하지 않 았 습 니 다. 이번 프로그램 은 다른 사람의 코드 로 경로 의 저장 방법 을 흡수 하 였 습 니 다.
갑자기 이 방법 이 이 루어 진 것 같 아 요. Dijsktra 는 제 가 저번 에 쓴 것 보다 훨씬 간결 해 요!!그래서 과감하게 배 웠 습 니 다. 약 한 채소 의 성장 은 신의 도움 과 떨 어 질 수 없습니다. 여기 있 습 니 다.
대 신 룸메이트 감사합니다!!!코드 를 붙 여 주세요. 저장 하 세 요.
P: 코드 와 알고리즘 은 모두 룸메이트 의 것 입 니 다. 공 부 했 습 니 다...:
/*
0 ,weight[u,v] u v , dis[]
: dis[0] 0, , (OK[] = 0)。
n-1 :
1 tmp, (OK[] = 1)。
2 tmp k, Relax(tmp,k), , dis[tmp]+weight[tmp,k]
#include
#include
const int IFINITY = 99999999;
const int N = 50;
int main()
{
int map[N][N], final[N], D[N], parent[N];
//
memset(final, 0, sizeof(final));
memset(parent, -1, sizeof(parent));
for(int i = 0; i < N; i++)
{
D[i] = IFINITY;
for(int j = 0; j < N; j++)
map[i][j] = IFINITY;
}
D[0] = 0;
int n, m, s, e, w;
scanf("%d %d", &n, &m);
for(int i = 0; i < m; i++)
{
scanf("%d %d %d", &s, &e, &w);
map[s][e] = w;
}
//Dijsktra
for(int i = 1; i <= n-1; i++)
{
int tmp = -1;
for(int j = 0; j < n; j++)
if(final[j] == 0 && (tmp == -1 || D[tmp] > D[j]))
tmp = j;
final[tmp] = 1;
for(int k = 0; k < n; k++)
if(final[k] == 0 && map[tmp][k] != IFINITY && D[tmp] + map[tmp][k] < D[k])
{
D[k] = D[tmp] + map[tmp][k];
parent[k] = tmp;
}
}
//
for(int i = 1; i < n; i++)
{
int tmp = i;
while(parent[tmp] != -1)
{
printf("v%d\t", tmp);
tmp = parent[tmp];
}
if(parent[i] != -1)
{
printf("v0
");
printf("v0 to v%d has a shortest distance of %d
", i, D[i]);
}
}
system("pause");
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
vue 단일 페이지에 여러 개의 echarts 도표가 있을 때의 공용 코드 쓰기html에서: 데이터 처리는 말할 필요가 없다.응, 직접 그림을 그려: 공통 섹션: 이 페이지를 떠날 때 파괴: 추가 정보: Vue + Echarts 차트 표시 및 동적 렌더링 준비 작업 echarts 의존 설치 n...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.