切换到宽版
  • 2191阅读
  • 7回复

[已解答]有没有谁编程厉害啊,能帮我改下程序吗! [复制链接]

上一主题 下一主题
离线xk2243098xk

UID: 487842

 
发帖
20
金币
72
道行
1
原创
0
奖券
2
斑龄
0
道券
0
获奖
0
座驾
设备
摄影级
在线时间: 37(小时)
注册时间: 2008-07-15
最后登录: 2014-05-22
只看楼主 倒序阅读 使用道具 楼主  发表于: 2008-10-22
— 本帖被 风火轮 执行锁定操作(2008-11-19) —
下面是这个程序是数据结构的,这个是别人的,有没有哪位高手可以帮我改一下(就是改成看不出是抄袭的那种)。没办法,本人天生就怕编程,看到就晕了,实在编不出来,才出此下策。希望有人帮我看下,在此先谢过了!




题目描述:给定一个地区的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);
}
描述:要改的程序
附件: 程序.rar (4 K) 下载次数:1
山庄提示: 道行不够,道券不够?---☆点此充值☆
 
离线lyt1981

UID: 515248

发帖
136
金币
2628
道行
30
原创
0
奖券
0
斑龄
0
道券
0
获奖
0
座驾
设备
摄影级
在线时间: 117(小时)
注册时间: 2008-08-16
最后登录: 2009-02-28
只看该作者 沙发  发表于: 2008-10-25
呵呵 如果是三年前还可以 现在不行了 老了 呵呵
如何不发帖就快速得到金币道行
 
离线lhpcll

UID: 547069

发帖
47
金币
72
道行
2
原创
0
奖券
0
斑龄
0
道券
0
获奖
0
座驾
设备
摄影级
在线时间: 114(小时)
注册时间: 2008-09-25
最后登录: 2011-04-22
只看该作者 板凳  发表于: 2008-10-26
呵呵,正确算法的正解应该都一样.要想改成看不出来改动过的.最简单的办法就是把变量名改一下啊.还有函数名称也改了.

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

偶对c++不熟悉.而且纯数学模型的算法也不太懂.帮不了什么忙.建议楼主试试.
1条评分
By lettobe1981 金币 +5 | 理由: 回复认真,加分鼓励 2008-10-26
如何不发帖就快速得到金币道行
 
离线stormxs

UID: 546678

发帖
108
金币
155
道行
2
原创
0
奖券
0
斑龄
0
道券
0
获奖
0
座驾
设备
摄影级
在线时间: 14(小时)
注册时间: 2008-09-24
最后登录: 2014-01-02
只看该作者 地板  发表于: 2008-10-27
来这里是问错地方了吧. 上MSDN吧
如何不发帖就快速得到金币道行
 
离线lining230521

UID: 451744

发帖
121
金币
21
道行
5
原创
0
奖券
0
斑龄
0
道券
0
获奖
0
座驾
设备
摄影级
在线时间: 24(小时)
注册时间: 2008-06-02
最后登录: 2010-06-09
只看该作者 4楼 发表于: 2008-10-29
我正在学习当中,还不能为你解答,呵呵,
如何不发帖就快速得到金币道行
 
离线apnzj

UID: 497035

精华: *
级别: *
发帖
*
金币
*
道行
*
原创
0
奖券
0
斑龄
0
道券
0
获奖
0
座驾
设备
摄影级
在线时间: (小时)
注册时间: *
最后登录: *
只看该作者 5楼 发表于: 2008-10-29
这个问题看样子有点复杂
如何不发帖就快速得到金币道行
 
离线peak

UID: 11498

发帖
367
金币
90
道行
103
原创
0
奖券
0
斑龄
0
道券
0
获奖
0
座驾
设备
摄影级
在线时间: 103(小时)
注册时间: 2005-09-06
最后登录: 2011-09-01
只看该作者 6楼 发表于: 2008-11-18
据我看也只能用三楼提到的方法,可以找个文本编辑器,然后用替换功能,将变量和函数名改一下
如何不发帖就快速得到金币道行
 
离线asdfnan

UID: 409127

发帖
57
金币
21
道行
6
原创
0
奖券
0
斑龄
0
道券
0
获奖
0
座驾
设备
摄影级
在线时间: 66(小时)
注册时间: 2008-03-30
最后登录: 2021-06-19
只看该作者 7楼 发表于: 2008-11-19
用户被禁言,该主题自动屏蔽!
如何不发帖就快速得到金币道行