#5
by かずま » 8年前
インデントが変です。
全角スペースは使用しないでください。
勝手にグラフを作ってやってみました。
コード:
#include <stdio.h>
#define N 8
int path[N][N] = {
/* -> 0 1 2 3 4 5 6 7 */
/*0*/ 0, 1, 1, N, N, N, N, N,
/*1*/ N, 0, N, N, 1, N, N, N,
/*2*/ N, 1, 0, 1, N, 1, N, N,
/*3*/ N, N, N, 0, 1, 1, 1, N,
/*4*/ N, N, N, N, 0, N, N, 1,
/*5*/ N, N, N, N, N, 0, 1, N,
/*6*/ N, N, 1, N, N, N, 0, 1,
/*7*/ N, N, N, 1, N, N, N, 0,
};
int dijkstra(int s, int g)
{
struct {
int found;
int distance;
} node[N];
int i, j, min;
for (i = 0; i < N; i++) {
node[i].found = 0;
node[i].distance = N;
}
node[s].distance = 0;
for (j = 0; j < N; j++) {
node[s].found = 1;
if (s == g)
return node[s].distance;
for (i = 0; i < N; i++) {
if (!node[i].found) {
int dist = node[s].distance + path[s][i];
if (dist < node[i].distance)
node[i].distance = dist;
}
}
min = N;
for (i = 0; i < N; i++) {
if (!node[i].found)
if (node[i].distance < min) {
min = node[i].distance;
s = i;
}
}
}
return -1;
}
int main(void)
{
int distance = dijkstra(0, 7);
printf("0->7: %d\n", distance);
return 0;
}
for (j = 1; のループは、for (j = 0; でないといけないのでは?
インデントが変です。
全角スペースは使用しないでください。
勝手にグラフを作ってやってみました。
[code=c]
#include <stdio.h>
#define N 8
int path[N][N] = {
/* -> 0 1 2 3 4 5 6 7 */
/*0*/ 0, 1, 1, N, N, N, N, N,
/*1*/ N, 0, N, N, 1, N, N, N,
/*2*/ N, 1, 0, 1, N, 1, N, N,
/*3*/ N, N, N, 0, 1, 1, 1, N,
/*4*/ N, N, N, N, 0, N, N, 1,
/*5*/ N, N, N, N, N, 0, 1, N,
/*6*/ N, N, 1, N, N, N, 0, 1,
/*7*/ N, N, N, 1, N, N, N, 0,
};
int dijkstra(int s, int g)
{
struct {
int found;
int distance;
} node[N];
int i, j, min;
for (i = 0; i < N; i++) {
node[i].found = 0;
node[i].distance = N;
}
node[s].distance = 0;
for (j = 0; j < N; j++) {
node[s].found = 1;
if (s == g)
return node[s].distance;
for (i = 0; i < N; i++) {
if (!node[i].found) {
int dist = node[s].distance + path[s][i];
if (dist < node[i].distance)
node[i].distance = dist;
}
}
min = N;
for (i = 0; i < N; i++) {
if (!node[i].found)
if (node[i].distance < min) {
min = node[i].distance;
s = i;
}
}
}
return -1;
}
int main(void)
{
int distance = dijkstra(0, 7);
printf("0->7: %d\n", distance);
return 0;
}
[/code]
for (j = 1; のループは、for (j = 0; でないといけないのでは?