#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
代码写的比较乱 不好意思