【发布时间】:2016-06-06 15:15:57
【问题描述】:
我想找到从 (0,0) 到 (6,6) 的最短路径,但我不知道如何使用 C。-1 是我可以走的路,-2 是我可以走的路我不能去。 0 是起点,-3 是终点。 请帮忙..
#include<stdio.h>
#define VERTICES 7
int maze[VERTICES][VERTICES] = {
{ 0, -2, -1, -1, -1, -1, -1 },
{ -1, -2, -1, -2, -2, -2, -2 },
{ -1, -1, -1, -1, -1, -1, -1 },
{ -1, -2, -2, -2, -2, -2, -1 },
{ -1, -2, -1, -1, -1, -2, -1 },
{ -1, -2, -1, -2, -2, -2, -1 },
{ -1, -1, -1, -2, -1, -1, -3 } };
int A[VERTICES][VERTICES];
printA(int n)
{
int i, j;
printf("===============================\n");
for (i = 0; i < n; i++){
for (j = 0; j < n; j++)
printf("%3d", A[i][j]);
printf("\n");
}
printf("===============================\n");
}
void solve(int n)
{
int i, j, k=0;
for (i = 0; i<n; i++)
for (j = 0; j<n; j++)
A[i][j] = maze[i][j];
while (1)
{
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
if (A[i][j] == k)
{
if (0 <= i + 1 < n && 0 <= j < n && A[i + 1][j] == -1)
A[i + 1][j] = k + 1;
if (0 <= i - 1 < n && 0 <= j < n && A[i - 1][j] == -1)
A[i - 1][j] = k + 1;
if (0 <= i < n && 0 <= j + 1 < n && A[i][j + 1] == -1)
A[i][j + 1] = k + 1;
if (0 <= i < n && 0 <= j - 1 < n && A[i][j - 1] == -1)
A[i][j - 1] = k + 1;
if (A[i][j] == -3)
break;
}
}
k++;
}
printf("%d\n", k);
printA(VERTICES);
}
main()
{
solve(VERTICES);
}
【问题讨论】:
-
省略返回值类型是不好的,除非你使用的是太旧的编译器。
-
尝试谷歌搜索“广度优先搜索 c”。
-
可能是Lee algorithm?
-
@Tomer 或 Dijkstra?
-
谢谢大家,但我不能在这里应用 BFS 和 Dijkstra,也找不到 lee 算法..我几乎是 C..T.T 的新手
标签: c shortest-path