查看完整版本: [-- 有没有谁编程厉害啊,能帮我改下程序吗! --]

武当休闲山庄 -> 电脑求助 -> 有没有谁编程厉害啊,能帮我改下程序吗! [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

xk2243098xk 2008-10-22 19:25
下面是这个程序是数据结构的,这个是别人的,有没有哪位高手可以帮我改一下(就是改成看不出是抄袭的那种)。没办法,本人天生就怕编程,看到就晕了,实在编不出来,才出此下策。希望有人帮我看下,在此先谢过了!




题目描述:给定一个地区的n个城市间的距离网,用Prim算法或Kruskal算法建立最小生成树,并计算得到的最小生成树的代价。
功能要求及说明:(主要使用的知识: 图)
(1)城市间的距离网采用邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出的定义,若两个城市之间不存在道路,则将相应边的权值设为自己定义的无穷大值。要求在屏幕上显示得到的最小生成树中包括了哪些城市间的道路,并显示得到的最小生成树的代价;
(2)表示城市间距离网的邻接矩阵(要求至少6个城市,10条边);并且利用文件对数据进行提取。
(3)输出最小生成树中包括的边及其权值,并显示得到的最小生成树的代价。
(4)采用模块化设计;

程序如下,也可到链接下载

#define MAXVEX 40
#define MAXCOST 10000
#define N 6

#include<stdio.h>
void main()
{
FILE *p; /*定义一个指向文件的指针*/
int i=1,j,m,mx[MAXVEX][MAXVEX];char ch;
void zxscs_sh(int c[MAXVEX][MAXVEX],int n); /*函数声明*/
printf("\n!!ATTENTION: \n 1),Please create a right file and put it in the right place.\n");
printf(" 2),Please rewrite the 'N' which means the numbers in each line.\n"); /*提示信息*/
printf(" 3),Have you done it ? y(YES) or n(NO) : "); /*输出提示信息*/
getchar();
if((p=fopen("D:\\int5.txt","r"))==NULL)/*判断打开文件成功与否*/
{
printf(" !The file can not be opened\n");/*输出提示信息*/
exit(1);
}
for(m=1;m<=N;m++)
{
for(j=1;j<=N;j++)
fscanf(p,"%d",&mx[j]); /*从路径指明的文本文件中调取整型数据,并赋给数组元素*/
i++;
}

for (i=1;i<=N;i++)
for (j=1;j<=N;j++)
if(mx[j]==0)/*判断数据,若为零,则表示城市之间不相通或同一城市*/
mx[j]=MAXCOST;
printf("\n The 'zhuixiaoshenchenshu' is :\n ");
zxscs_sh(mx,N);/*调用函数*/
printf("\n Do you want to see the file? y / n : ");/*输出提示信息*/
getchar();
ch=getchar();
if(ch=='y')/*判断输入条件,若为Y,则表示选择显示文本文件的内容*/
{
for (i=1;i<=N;i++)
{
printf(" ");
for (j=1;j<=N;j++)
{
if(mx[j]==MAXCOST)
mx[j]=0;
printf(" %d ",mx[j]);/*输出数据*/
}
printf("\n");
}
getchar();/*控制显示*/
printf(" !EXIT by any input.");/*输出提示信息*/
getchar();
}
else
{
printf(" !EXIT by any input.");/*输出提示信息*/
getchar();
getchar();
}
}


void zxscs_sh(int c[MAXVEX][MAXVEX],int n) /*zxscs:最小生成树;给定网的顶点,数组表示对应边的权值,打印最小生成树的边和代价*/
{
int i,j,k,min,sum=0,lc[MAXVEX],location[MAXVEX];
for (i=1;i<=n;i++)
{
lc=c[1];
location=1;
} /*初始化数组*/

location[1]=0;
for (i=2;i<=n;i++)/*从U之外求离U中某一点顶点最近的顶点*/
{
min=MAXCOST; /*将MAXCOST赋给变量min*/
j=1;k=i;
while (j<=n)
{
if (lc[j]<min && location[j]!=0)
{
min=lc[j];
k=j;
}
j++;
}
sum=sum+min;/*累加求和*/
printf("\n Bian %d is :(v%d,v%d). The cost of this bian is: ( %d );\n",i-1,location[k],k,min); /*打印最小生成树的边,每条边对应的权值*/
location[k]=0; /*将顶点k并入到U中去*/
for (j=2;j<=n;j++)
if (location[j]!=0 && c[k][j]<lc[j])/*比较权的大小*/
{
lc[j]=c[k][j];
location[j]=k;
}
}
printf("\n The whole cost are: %d\n",sum);
}

lyt1981 2008-10-25 17:05
呵呵 如果是三年前还可以 现在不行了 老了 呵呵

lhpcll 2008-10-26 14:31
呵呵,正确算法的正解应该都一样.要想改成看不出来改动过的.最简单的办法就是把变量名改一下啊.还有函数名称也改了.

嘿嘿.比较偷懒的办法了.

偶对c++不熟悉.而且纯数学模型的算法也不太懂.帮不了什么忙.建议楼主试试.

stormxs 2008-10-27 13:47
来这里是问错地方了吧. 上MSDN吧

lining230521 2008-10-29 09:06
我正在学习当中,还不能为你解答,呵呵,

apnzj 2008-10-29 09:43
这个问题看样子有点复杂

peak 2008-11-18 21:01
据我看也只能用三楼提到的方法,可以找个文本编辑器,然后用替换功能,将变量和函数名改一下

asdfnan 2008-11-19 20:36
用户被禁言,该主题自动屏蔽!


查看完整版本: [-- 有没有谁编程厉害啊,能帮我改下程序吗! --] [-- top --]


Powered by www.wdsz.net v8.7.1 Code ©2005-2018www.wdsz.net
Gzip enabled


沪ICP备:05041533号