新手 C语言 Floyd算法 怎么递归写路径追溯 5C
 #include <stdio.h>
#include <math.h>
#define MAXSIZE 100
#define Infinity 10001
int G[MAXSIZE][MAXSIZE],Nv,Ne,Distance,x[MAXSIZE],y[MAXSIZE],path[MAXSIZE][MAXSIZE],FirstPoint[MAXSIZE],count=0,count_2=0,Destination[MAXSIZE],D[MAXSIZE][MAXSIZE];
int GetDistance(int Xa,int Ya,int Xb,int Yb)
{
    return (int)pow((pow(Xa-Xb,2)+pow(Ya-Yb,2)),0.5);
}
void PrintPath(int i,int j)
{

}
void BuildGraph()
{
    int i,j;
    scanf("%d %d", &Nv,&Distance);
    if(Distance+7.5>=50)
    {
        printf("1\n");
        return ;
    }
    for (i = 0; i<Nv; i++)
    {
        scanf("%d %d",&x[i],&y[i]);
        if(GetDistance(x[i],y[i],0,0)<=7.5+Distance)
        {
            FirstPoint[count]=i;
            count++;
        }
        if(!(abs(x[i])<50-Distance&&abs(y[i])<50-Distance))
        {
            Destination[count_2]=i;
            count_2++;
        }
    }
    for (i = 0; i<Nv; i++)
    {
        for (j = 0; j<Nv; j++)
        {
            if(GetDistance(x[i],y[i],x[j],y[j])<=Distance&&i!=j)
            {
                G[i][j]=1;
                G[j][i]=1;
            }
            else if(i==j)
            {
                G[i][j]=0;
            }
            else
            {
                G[i][j]=Infinity;
                G[j][i]=Infinity;
            }
        }
    }
}
void FindPath()
{
    int i,j,k,MinDist=Infinity,Temp_i,Temp_j;
    for(i=0;i<Nv;i++)
    {
        for(j=0;j<Nv;j++)
        {
            D[i][j]=G[i][j];
            path[i][j]=-1;
        }
    }
    for(k=0;k<Nv;k++)
    {
        for(i=0;i<Nv;i++)
        {
            for(j=0;j<Nv;j++)
            {
                if(D[i][k]+D[k][j]<D[i][j])
                {
                    D[i][j]=D[i][k]+D[k][j];
                    path[i][j]=k;
                }
            }
        }
    }
    for(i=0;i<count;i++)
    {
        for(j=0;j<count_2;j++)
        {
            if(D[FirstPoint[i]][Destination[j]]<MinDist)
            {
                MinDist=D[FirstPoint[i]][Destination[j]];
                Temp_i=FirstPoint[i];
                Temp_j=Destination[j];
            }
        }
    }
    if(MinDist==Infinity)
    {
        printf("0\n");
    }
    else
    {
        printf("%d\n",D[Temp_i][Temp_j]+2);
        PrintPath(Temp_i,Temp_j);
    }
}
int main()
{
    BuildGraph();
    FindPath();
    return 0;
}

请问如何用递归的方法写出PrintPath这个函数?
测试数据
输入
17 15
10 -21
10 21
-40 10
30 -50
20 40
35 10
0 -10
-25 22
40 -40
-30 30
-10 22
0 11
25 21
25 10
10 10
10 35
-30 10
输出
4
0 11
10 21
10 35
原题链接:https://pta.patest.cn/pta/test/1342/exam/4/question/23159
代码写的比较乱 不好意思

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问