#include<windows.h>
#pragma warning(disable:4996)
#include<stdio.h>
#include<stdlib.h>
#define off 0
#define on 1
#define MAX 999
#define node 9
int s, end;
int dist[node], mark[node], prev[node];
int p;
typedef struct Graph_Data
{
int front; //リンクの始点
int next; //リンクの終点
int cost; //リンクの重み
}graph;
graph *gra; //グラフデータ用
void get_weight(void)
{
int start;
int end;
return ;
}
void Create_graph() {
FILE *fp;
graph *p; //構造体用ポインタを宣言
//有効リンク数に対し、動的にメモリ領域を確保する
gra = (graph *)malloc(sizeof(graph) * 24);
p = gra; //グラフを指す
fp = fopen("6078-aa.c", "r"); //ファイルを開く
if (!fp) puts("Open fail!"); //開いたことを確認
//ファイルポインタが一行ずつ(データ 3 つ)読み込んで、終了時に EOF が返す
for (int i = 0; i<24 && !feof(fp); i++) { //データを構造体へ読み込む
fscanf(fp, "%d %d %d", &p->front, &p->next, &p->cost);
p++; //グラフ内次のリンクへ移動
}
fclose(fp);
}
void Dijkstra() {
Create_graph();
int i, j, k;
for (i = 0; i < node; i++) {
dist [i] = cost
mark[i] = off;
if (dist[i] == MAX) prev[i] = -1;
else prev[i] = 0;
}
dist[s] = 0;
mark[s] = on;
while (mark[end] = !on)
{
int min = MAX;
for (j = 0; j < node; j++) {
if ((!mark[i] )&& ( dist[j]<min)) {
min = dist[j];
k = j;
}
}
mark[k] = on;
for (j = 0; j< node; j++) {
if (!mark[j]&& dist[j] + cost < dist[k]) {
dist[j] = dist[k] + cost ;
prev[j] = k;
}
}
}
}
int main() {
int j, m, count = 0;
int way[node];
printf("\nInput the start point and the end point :");
scanf("%d %d ", &s, &end);
Dijkstra();
printf("The distance from %d is: %d\n", s, end, dist[end]);
m = end;
while (m != s) {
count++;
way[count] = prev[m];
m = prev[m];
}
printf("\nRhe best path is:\n");
for (j = count; j >= 1; j--) {
printf("%d ->", way[j]);
}
printf("%d\n", end);
system("pause");
return 0;
}
0 1 2
0 3 3
1 0 2
1 2 3
1 4 4
2 1 3
2 5 2
3 0 3
3 4 2
3 6 1
4 1 4
4 3 2
4 5 4
4 7 3
5 2 2
5 4 4
5 8 3
6 3 1
6 7 6
7 4 3
7 6 6
7 8 1
8 5 3
8 7 1
サブ関数で get_weight(int start, int end) などを使えと言われてもわかりません
どなたか教えてくださいませんか?