int** dk(Gralist a, int begin) {//这个时找最短路径返回结点序列
int visited[MAX];
int distance[MAX];
int** in;//静态内存申请
in = (int**)malloc(sizeof(int*) * MAX);
for (int i = 0; i < MAX; i++) {
in[i] = (int*)malloc(sizeof(int) * MAX);
}
for (int i = 0; i < MAX; i++) {
if (i == begin)
visited[i] = 1;
else
visited[i] = 0;
distance[i] = a->matrix_o[begin][i];
in[i][0] = begin;
in[i][1] = i;
}
for (int i = 0; i < MAX; i++) {
for (int j = 2; j < MAX; j++) {
in[i][j] = MOST;
}
}
for (int i = 0; i < MAX; i++)
{
//找distance 最短的结点
int smal = 0;
int j = 0;
for (j = 0; j < MAX; j++)
{
if (visited[j] == 0)
{
smal = j;
break;
}
}
if (j >= MAX)
break;
for (int i = 0; i < MAX; i++) {
if ((distance[smal] > distance[i]) && visited[i] != 1)
{
smal = i;
}
}
visited[smal] = 1;
for (int i = 0; i < MAX; i++) {
if ((distance[i] > distance[smal] + a->matrix_o[smal][i]) && visited[i] != 1) {
distance[i] = distance[smal] + a->matrix_o[smal][i];
for (int j = 0, fl = 0; j < MAX; j++) {
in[i][j] = in[smal][j];
if (in[smal][j] == MOST && fl == 0)
{
in[i][j] = i;
fl++;
}
}
}
}
}
return in;
}
int main() {
into_e();
into_v();
Graph a;
create_graph(&a);//前面都测试过的
int** i = NULL;
i=dk(&a, 0);
if (i == NULL)
return 0;
printf("10%d\n", i);//这里也能打印出来
for (int k=0; k < 2; i++)
{
for (int j=0; j < 2; j++)
{
printf("10%d\n", i);//printf("10%d\n", i[k][j])//这个读取位置访问冲突
//这里不知道为什么陷入的死循环
}
}
return 0;
}