程门映雪 发表于 2010-4-11 19:19

如何才能输出结果啊!!各位大侠,帮帮小妹吧!!!谢谢啦

#include<stdio.h>
#include<stdlib.h>

typedef struct Vnode{ //前驱和最短路径长度数组节点的结构
int lenth; //记录从起始点到该点的最短路径长度
int pv; //记录最短路径中该节点的前驱
}Vnode;
int G;




int Path={0}; //记录所有最短路径
int Pcount=0; //count记录最短路径的条数,level记录层数

void InitMap(Vnode *D,int v0) //初始化所以节点的前驱数组和最短路径长度
{
int final;
int v,lenth=0,count=0,flag=0,p,w;
for(v=0;v<256;v++)
{
final=0; //初始化已访问节点数组,0表示未访问
for( p=0;p<256;p++) //初始化各个节点的前驱数组
D.pv=0;
if(v!=v0)
{
D.lenth=G; //设置首节点到当前节点的路长
if(G==1)
{   
D.pv=1;
final=1; //将与首节点直接相连的节点设为已访问
count++; //count记录已访问节点数
}
}
else
{
D.lenth=0; //首节点的路长为0
final=1; //首节点设为已访问
count++;
}
}

lenth=1; //记录当前层数,即当前节点到起始点的最短路径长度
while(count<256) //主循环生成各节点的最短路径长度和前驱节点数组
{
for(w=0;w<256;w++)
{
if(!final)
{
for(v=0;v<256;v++)
if(final&&D.lenth==lenth)
{
if(G==1&&(D.lenth<D.lenth+1))
{
flag=1;
D.lenth=D.lenth+1;
D.pv=1;
}
if(G==1&&(D.lenth==D.lenth+1))
D.pv=1;
}
if(flag==1)
{
final=1;
count++;
flag=0;
}
}
}
lenth++;
}
}

void InitPath(Vnode *D,int level,int v,int v0) //生成初始最短路径数组,每行表示一条最短路径
{int j;
if(v==v0)
{
Pcount++;
return;
}
for(j=0;j<256;j++)
{
if(D.pv==1)
{
Path=j+1;
InitPath(D,level+1,j+1,v0);
}
}
}

void ChangePath(Vnode *D,int ve) //生成完整最短路径数组,将路径中为0的项填充为上一行对应项
{
int i=0,j=0;
for(i=0;i<Pcount;i++)
{
for(j=0;j<=D.lenth;j++)
{
if(Path==0)
Path=Path;
}
}

}


void main()
{FILE *fp;
if ((fp=fopen(" mydata.txt","r"))==NULL)
printf("cannot open file");

       fread(G,1,256*256,fp);
Vnode D;
int v0,ve,lenth=0,level=1;
int i=0,j=0;
printf("Input the start node and the last node: ");
scanf("%d %d",&v0,&ve);
getchar();


InitMap(D,v0-1);

printf("The shortest pathes is: \n");

Path=ve;
InitPath(D,level,ve,v0);
ChangePath(D,ve);

for(i=0;i<Pcount;i++)
{
for(j=D.lenth;j>=0;j--)
printf("%d ",Path);
printf("\n");
}
}
页: [1]
查看完整版本: 如何才能输出结果啊!!各位大侠,帮帮小妹吧!!!谢谢啦