谁能帮我一下,我的 printf 怎么老是输出零,是软件破解的不对,还是我的程序错了
#include<stdio.h>#include<stdlib.h>
#define MAX_VEX_NUM 20
#define N 30 //...........队的最大长度
#define edge_max 100000 //...........边的最大长度值,为不通路的值
typedef struct shortest_path
{
int parent;
float distance;
}shortest_path;
typedef struct Queue
{
int *base;
int front,rear,size;
}Queue;
typedef struct arc_node
{
int adjvex;
float arc_infor;
struct arc_node *next_arc;
}arc_node;
typedef struct vex_node
{
char vex;
arc_node *first_arc;
}vex_node;
typedef struct graph
{
int arc_num,vex_num,vex[MAX_VEX_NUM];
int kind;//kind为0为无向图,1为有向图
vex_node *adj_list;
}Graph;
FILE *fp;
void main()
{
Graph* file(Graph *g);
void creat_graph(Graph *g);
void DFS(Graph *g,int i);
void DFS_traverse(Graph *g);
void init_queue(Queue *q);
void push_queue(Queue *q,int vex);
int pop_queue(Queue *q);
void BFS(Graph *g,int i,Queue *q);
void BFS_traverse(Graph *g,Queue *q);
int prime(Graph *g);
int pop_priority_queue(Queue *q,shortest_path *path);
shortest_path* dijkstra(Graph *g,int i,Queue *q);
Graph g1,*g; Queue *q,q1;
g=&g1;q=&q1;
g=file(g);
printf(".............深度优先搜索...............\n");
DFS_traverse(g);
printf("\n");
printf(".............广度优先搜索...............\n");
BFS_traverse(g,q);
printf("\n");
printf("............. prime算法.......................\n");
prime(g);
printf("............. dijkstra算法.......................\n");
dijkstra(g,3,q);
}
//.................................................创建一个图
void creat_graph(Graph *g)//采用临街表寸出土的信息
{
int i,k,vex1,vex2;
arc_node *s;
float arc_infor1;
printf("输入图的顶点数,边数,和图的类型\n");
fscanf(fp,"%d%d%d",&g->vex_num,&g->arc_num,&g->kind);
fgetc(fp);
printf(" %d %d %d",g->vex_num,g->arc_num,g->kind);
g->adj_list=(vex_node*)malloc(g->vex_num*sizeof(vex_node));
for(i=0;i<g->vex_num;i++)
{
printf("输入图的顶点信息\n");
fscanf(fp,"%c",&g->adj_list[i].vex);
fgetc(fp);
g->adj_list[i].first_arc=NULL;
}//初始化邻接矩阵
for(k=0;k<g->arc_num;k++)
{
if(g->kind==0)
{
printf("输入起始顶点vex1和终点vex2的值还有边arc_infor1的值\n");
fscanf(fp,"%d%d%f",&vex1,&vex2,&arc_infor1);
fgetc(fp);
s=(arc_node*)malloc(sizeof(arc_node));
s->adjvex=vex2;
s->arc_infor=arc_infor1;
s->next_arc=g->adj_list[vex1].first_arc;
g->adj_list[vex1].first_arc=s;
s=(arc_node*)malloc(sizeof(arc_node));
s->adjvex=vex1;//边连接的另一定点
s->arc_infor=arc_infor1;
s->next_arc=g->adj_list[vex2].first_arc;//由此可知先输入的边在邻接表的后面位置
g->adj_list[vex2].first_arc=s;
}
else // 当为有向图时
{
printf("输入起始顶点vex1和终点vex2的值\n");
fscanf(fp,"%d%d%f",&vex1,&vex2,&arc_infor1);
fgetc(fp);
s=(arc_node*)malloc(sizeof(arc_node));
s->adjvex=vex2;
s->arc_infor=arc_infor1;
s->next_arc=g->adj_list[vex1].first_arc;
g->adj_list[vex1].first_arc=s;
}
}
}
int prime(Graph *g)
{
int i,k,a[2][MAX_VEX_NUM-1],m,n;
arc_node *p;
float edge,sum=0;
for(i=0;i<g->vex_num;i++)
g->vex[i]=-1;
g->vex[0]=1;
for(k=0;k<g->vex_num-1;k++)
{
edge=edge_max;//初始值设置为大于所有边值
for(i=0;i<g->vex_num;i++)
{
if(g->vex[i]==1)//如果顶点已访问,找未访问的最小边值的未访问顶点
{
p=g->adj_list[i].first_arc;
while(p!=NULL)
{
if(edge>p->arc_infor&&g->vex[p->adjvex]!=1)
{
edge=p->arc_infor;
m=i; n=p->adjvex;
}
p=p->next_arc;
}
}
}//找到未访问顶点中到已访问顶点集中边值最小的那个顶点(未访问)
sum=sum+edge;
g->vex[n]=1;
a[0][k]=m;a[1][k]=n;
}
for(i=0;i<g->vex_num-1;i++)
printf(" %d--%d ",a[0][i],a[1][i]);
printf(" %d ",sum); //............................................再此句前设置一个断点可以看到sum的值但是一经输出就是0为什么会这样
return a[2][g->vex_num-1];
}
Graph* file(Graph *g)
{
fp=fopen("E:\\3.txt","r");
if(fp==NULL)
{
printf(" cannt open the file\n");
exit(0);
}
else
creat_graph(g);
fclose(fp);
return g;
}