读书人

这个程序做好之后还是有点小疑点

发布时间: 2012-06-30 17:20:12 作者: rapoo

求助,这个程序做好之后还是有点小问题!
#include"time.h"
#include"stdlib.h"
#include"stdio.h"
#include <string.h>
#define MAXE 100
int e,array[20];
struct edges
{
int bv;
int tv;
int w;
};
typedef struct edges edgeset;
int seeks(int set[],int v)
{
int i;
i=v;
while(set[i]>0)
i=set[i];
return i;
}
void kruskal(edgeset ge[],int n,int e)
{
int set[MAXE],v1,v2,i,j;
for(i=1;i<n+1;i++)
set[i]=0;
i=1;
j=1;
while(j<=e&&i<=n-1)
{
v1=seeks(set,ge[j].bv);
v2=seeks(set,ge[j].tv);
if(v1!=v2)
{
printf("(%d,%d):%d\n",ge[j].bv,ge[j].tv,ge[j].w);
set[v1]=v2;
i++;
}
j++;
}
}
void insertsort(edgeset ge[],int e)
{
int i,j;
for(i=2;i<=e;i++)
if(ge[i].w<ge[i-1].w)
{
ge[0]=ge[i];
j=i-1;
while(ge[0].w<ge[j].w)
{
ge[j+1]=ge[j];
j--;
}
ge[j+1]=ge[0];
}
}



void adjustMinHeap(int *a, int pos, int len){
int temp;
int child;
for (temp = a[pos]; 2 * pos + 1 <= len; pos = child){
child = 2 * pos + 1;
if (child < len && a[child] > a[child + 1])
child++;
if (a[child] < temp){ //再这儿把temp写成了a[pos], 显然应该是待调整的节点,因为如果元素不能往下流动,则退出。。。
a[pos] = a[child];
}
else {
break;
}
}
a[pos] = temp;
}

void minHeapSort(int *a)
{
int i;

for (i = e/2 - 1; i >= 0; i--)
adjustMinHeap(a, i, e - 1);
for (i = e - 1; i >= 0; i--){
//printf("%d ", a[0]);
int temp = a[0];
a[0] = a[i];
a[i] = temp;
adjustMinHeap(a, 0, i - 1);
}
}
void main()
{
printf("\n\n\n\n") ;
for(int m=0;m<10;m++)
printf(" ");
printf("************************************\n\n");
for( m=0;m<10;m++)
printf(" ");
printf("* 第八题:最小生成树问题: *\n\n");
for( m=0;m<10;m++)
printf(" ");
printf("************************************\n\n");
rand((unsigned)time(0));
edgeset ge[MAXE];
int a,N,i,r;
printf("请输入顶点个数:");
scanf("%d",&N);
printf("请输入边的条数:");
scanf("%d",&e);
printf("请输入边的信息(起点,终点),边的权值将自动生成:\n");
for(i=1;i<=e;i++)
{
scanf("%d,%d",&ge[i].bv,&ge[i].tv);
r=rand()%10000 ;
ge[i].w=r/10;
}
printf("系统随机产生各个边的权值后前后顶点以及他们之间\n的边的权值如下:(前顶点,后顶点,权值)\n");
for(i=1;i<=e;i++)
printf("%d,%d,%d\n",ge[i].bv,ge[i].tv,ge[i].w);
printf("\n\n");

//进入堆排序
for( i=0;i<e;i++)
array[i]=ge[i+1].w ;
minHeapSort(array);
printf("堆排序后权值从大到小输出如下\n");
for (i = 0; i < e; i++)
printf("%d ", array[i]);
printf("\n\n权值最小的边是:%d \n",array[e-1]);
printf("\n");
printf("克鲁斯卡尔算法求出最佳路径是:(格式如右面:<城市a,城市b>:路程)\n");
insertsort(ge,e);
kruskal(ge,N,e);

}



[解决办法]

#include"time.h"
#include"stdlib.h"
#include"stdio.h"
改为
#include<time.h>
#include<stdlib.h>
#include<stdio.h>

话说现在怎么这么多人问数据结构的题目 数据结构不是下学期才开吗?

[解决办法]
因为有很多找工作啃笔试题的...泪目...

话说今天刚看了一会堆排序,正准备跃跃欲试,不过看了楼主的结帖率,我突然就得其实我也挺忙的,恩恩,继续做笔试题。。。

探讨

#include"time.h"
#include"stdlib.h"
#include"stdio.h"
改为
#include<time.h>
#include<stdlib.h>
#include<stdio.h>

话说现在怎么这么多人问数据结构的题目 数据结构不是下学期才开吗?

读书人网 >C++

热点推荐