编程新手 请各位前辈看看错在哪里了?

free1879 2005-12-02 05:35:29
#include <stdio.h>
#include <stdlib.h>
#define Max 12
#define VertexNum 7 //Ëã·¨¿Î±¾156ҳͼ6.5Ϊ²âÊÔͼ ͼÖÐÓÐ7¸ö½Úµã12Ìõ±ß

struct List //½ÚµãÉêÃ÷
{
int Vertex1;
int Vertex2;
int Weight;
struct List *Next;
};

typedef struct List Node;
typedef Node *Edge;
//¶¨ÒåÁÚ½Óµã

int Edges[12][3]={{1,2,2},{1,3,4},{1,4,7},{1,6,5},{2,4,6},
{2,5,3},{2,7,8},{3,6,6},{4,6,1},{4,7,6},{5,7,7},{6,7,6}};
/* ͼ6.5Ò»¹²ÓÐ12Ìõ±ß£¬7¸ö½Úµã
½Úµã1£­7·Ö±ð´ú±íA-G*/
int Visited[VertexNum];//²éÕҼǼ

/* ---------------------------------------------------- */
/* kruskal Ëã·¨ */
/* ---------------------------------------------------- */

void Kruskal(Edge Head)
{
Edge Pointer;//½ÚµãÉêÃ÷
int EdgeNum=0;//ÒÑÁ¬½ÓµÄ±ßÊý
int Weight=0;

Pointer=Head;

while(EdgeNum!=(VertexNum-1))
/*µ±±ßµÄÊýĿΪ¶¥µãµÄÊýÄ¿¼õ1ʱѭ»·½áÊø*/
{
if(Visited[Pointer->Vertex1]==0||Visited[Pointer->Vertex2]==0)
//ÓÐÒ»¶¥µã²»ÔÚÉú³ÉÊ÷ÖÐ
{
printf("==>[%d,%d]",Pointer->Vertex1,Pointer->Vertex2);
printf("(%d)",Pointer->Weight);
Weight+=Pointer->Weight;
EdgeNum++;//±ßÊýÔö¼Ó1
Visited[Pointer->Vertex1]=1; //ÉèΪÒѲéÕÒ
Visited[Pointer->Vertex2]=1;//ÉèΪÒѲéÕÒ
}
Pointer=Pointer->Next;//ÍùÏÂÒ»¸ö½Úµã

if(Pointer==NULL)//ÒÑÎÞ±ßʱ
{
printf("No Spanning Tree\n");
break;
}
}
printf("\nTotalweight=%d\n",Weight);//Êä³ö¼ÓȨֵ×ܺÍ
}

/* ------------------------------------------------------------------------- */
/* Êä³öÁ´±íÊý¾Ý */
/* ------------------------------------------------------------------------- */
void Print_Edge(Edge Head)
{
Edge Pointer;//½ÚµãÉêÃ÷
Pointer=Head;//pointerÖ¸ÕëÉèΪÊ×½Úµã
while(Pointer!=NULL)//µ±½ÚµãΪNULLʱ½áÊøÑ­»·
{
printf("[%d,%d]",Pointer->Vertex1,Pointer->Vertex2);
printf("(%d)",Pointer->Weight);//Êä³ö¼ÓȨֵ
Pointer=Pointer->Next;//ÍùÏÂÒ»¸ö½Úµã
}
printf("\n");
}

/* ------------------------------------------------------------------------ */
/* µÝÔö²åÈëÁÚ½Ó±ßÖÁÁ´±íÄÚ */
/* ------------------------------------------------------------------------ */

Edge Insert_Edge(Edge Head,Edge New)
{
Edge Pointer;//½ÚµãÉêÃ÷

Pointer=Head;//pointerÖ¸ÕëÉèΪÊ×½Úµã

while(1)
{
if(New->Weight<HeaD.>Weight)//еļÓȨֵ±ÈÊ×½ÚµãÉÙ
{
New->Next=Head;//²åÈëÔÚÊ×½Úµã֮ǰ
Head=New;
break;
}
if(New->Weight>=Pointer->Weight&&New->Weight<Pointer->Next->Weight)
{
New->Next=Pointer->Next;
Pointer->Next=New;
break;
}
Pointer=Pointer->Next;//ÍùÏÂÒ»¸ö½Úµã
}
return Head;
}

/* -------------------------------------------------------------- */
/* ÊÍ·ÅÁ´±í */
/* -------------------------------------------------------------- */
void Free_Edge(Edge Head)
{
Edge Pointer;//½ÚµãÉêÃ÷

while(Head!=NULL)//µ±Ç°µãΪNULLʱ½áÊøÑ­»·
{
Pointer=Head;
Head=HeaD.>Next;//ÍùÏÂÒ»¸ö½Úµã
free(pointer);
}
}

/* ------------------------------------------------------------- */
/* ½¨Á¢Á´±í */
/* ------------------------------------------------------------- */
Edge Create_Edge(Edge Head)
{
Edge New;//½ÚµãÉêÃ÷
Edge Pointer;//½ÚµãÉêÃ÷
int i;

Head=(Edge)malloc(sizeof(Node));//ÄÚ´æÅäÖÃ

if(Head==NULL)
printf("Memory allocate failure!!\n");//ÄÚ´æÅäÖÃʧ°Ü
else
{
HeaD.>Vertex1=Edges[0][0];
HeaD.>Vertex2=Edges[0][1];//¶¨Òå½Úµã¼ÓȨֵ
HeaD.>Weight=Edges[0][2];
HeaD.>Next=NULL;

for(i£½1;i<12;i++)
{
New=(Edge)malloc(sizeof(Node));

if(New!=NULL)
{
New->Vertex1=Edges[i][0];
New->Vertex2=Edges[i][1];
New->Wihgt=Edges[i][2];//¶¨Òå½Úµã¼ÓȨֵ
New->Next=NULL

Head=Insert_Edge(Head,New);//²åÈëнڵã
}
}
}
return Head;
}

/* --------------------------------------------------------- */
/* Ö÷³ÌÐò */
/* --------------------------------------------------------- */
void main()
{
Edge Head;//½ÚµãÉêÃ÷
int i;

for(i=0;i<VertexNum;i++)//Çå³ý²éÕҼǼ
Visited[i]=0;

Head=Create_Edge(Head);

if(Head!=NULL)
{
printf("Kruskal algorithm:\n");
printf("First step:sorting\n");
Print_Edge(Head);
printf("second step:Find minimal spanning Tree.\n");

Kruskal(Head);//µ÷ÓÃkruskalËã·¨

Free_Edge(Head);//ÊÍ·ÅÁ´±í
}
}
...全文
342 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
aimt 2005-12-02
  • 打赏
  • 举报
回复
Edge Insert_Edge(Edge Head,Edge New)
{
Edge Pointer;//½ÚµãÉêÃ÷

Pointer=Head;//pointerÖ¸ÕëÉèΪÊ×½Úµã

while(1)
{
if(New->Weight<Head->Weight)//еļÓȨֵ±ÈÊ×½ÚµãÉÙ
//这里的HeaD.>写错了,应该是Head->,
{
New->Next=Head;//²åÈëÔÚÊ×½Úµã֮ǰ
Head=New;
break;
}
if(New->Weight>=Pointer->Weight&&New->Weight<Pointer->Next->Weight)
{
New->Next=Pointer->Next;
Pointer->Next=New;
break;
}
Pointer=Pointer->Next;//ÍùÏÂÒ»¸ö½Úµã
}
return Head;
}

/* -------------------------------------------------------------- */
/* ÊÍ·ÅÁ´±í */
/* -------------------------------------------------------------- */
void Free_Edge(Edge Head)
{
Edge Pointer;//½ÚµãÉêÃ÷

while(Head!=NULL)//µ±Ç°µãΪNULLʱ½áÊøÑ­»·
{
Pointer=Head;
Head=Head->Next;//ÍùÏÂÒ»¸ö½Úµã
//这里跟上面同样的错误;
free(Pointer); //注意大小写啊,兄弟,C和C++是区分大小写的.把pointer改成Pointer
}
}

/* ------------------------------------------------------------- */
/* ½¨Á¢Á´±í */
/* ------------------------------------------------------------- */
Edge Create_Edge(Edge Head)
{
Edge New;//½ÚµãÉêÃ÷
Edge Pointer;//½ÚµãÉêÃ÷
int i;

Head=(Edge)malloc(sizeof(Node));//ÄÚ´æÅäÖÃ

if(Head==NULL)
printf("Memory allocate failure!!\n");//ÄÚ´æÅäÖÃʧ°Ü
else
{
Head->Vertex1=Edges[0][0];
Head->Vertex2=Edges[0][1];//¶¨Òå½Úµã¼ÓȨֵ
Head->Weight=Edges[0][2];
Head->Next=NULL; //怎么全是HeaD.>的写法??难道真能这么用?不知道,全改回来!!

for(i£½1;i<12;i++)
//这里的pound是什么东西?在哪里定义了?还有……这句错得也太谱了吧:(
{
New=(Edge)malloc(sizeof(Node));

if(New!=NULL)
{
New->Vertex1=Edges[i][0];
New->Vertex2=Edges[i][1];
New->Weight=Edges[i][2];//¶¨Òå½Úµã¼ÓȨֵ
//New->Wihgt改回来,改成New->Weight
New->Next=NULL; //这句少了分号,快添上!

Head=Insert_Edge(Head,New);//²åÈëнڵã
}
}
}
return Head;
}

/* --------------------------------------------------------- */
/* Ö÷³ÌÐò */
/* --------------------------------------------------------- */
void main()
{
Edge Head;//½ÚµãÉêÃ÷
int i;

for(i=0;i<VertexNum;i++)//Çå³ý²éÕҼǼ
Visited[i]=0;

Head=Create_Edge(Head);

if(Head!=NULL)
{
printf("Kruskal algorithm:\n");
printf("First step:sorting\n");
Print_Edge(Head);
printf("second step:Find minimal spanning Tree.\n");

Kruskal(Head);//µ÷ÓÃkruskalËã·¨

Free_Edge(Head);//ÊÍ·ÅÁ´±í
}
}
aimt 2005-12-02
  • 打赏
  • 举报
回复
完了,打完了的东西,它说我贴子太长,一闪就没了.
#include <stdio.h>
#include <stdlib.h>
#define Max 12
#define VertexNum 7 //Ëã·¨¿Î±¾156ҳͼ6.5Ϊ²âÊÔͼ ͼÖÐÓÐ7¸ö½Úµã12Ìõ±ß

struct List //½ÚµãÉêÃ÷
{
int Vertex1;
int Vertex2;
int Weight;
struct List *Next;
};

typedef struct List Node;
typedef Node *Edge;
//¶¨ÒåÁÚ½Óµã

int Edges[12][3]={{1,2,2},{1,3,4},{1,4,7},{1,6,5},{2,4,6},
{2,5,3},{2,7,8},{3,6,6},{4,6,1},{4,7,6},{5,7,7},{6,7,6}};
/* ͼ6.5Ò»¹²ÓÐ12Ìõ±ß£¬7¸ö½Úµã
½Úµã1£­7·Ö±ð´ú±íA-G*/
int Visited[VertexNum];//²éÕҼǼ

/* ---------------------------------------------------- */
/* kruskal Ëã·¨ */
/* ---------------------------------------------------- */

void Kruskal(Edge Head)
{
Edge Pointer;//½ÚµãÉêÃ÷
int EdgeNum=0;//ÒÑÁ¬½ÓµÄ±ßÊý
int Weight=0;

Pointer=Head;

while(EdgeNum!=(VertexNum-1))
/*µ±±ßµÄÊýĿΪ¶¥µãµÄÊýÄ¿¼õ1ʱѭ»·½áÊø*/
{
if(Visited[Pointer->Vertex1]==0||Visited[Pointer->Vertex2]==0)
//ÓÐÒ»¶¥µã²»ÔÚÉú³ÉÊ÷ÖÐ
{
printf("==>[%d,%d]",Pointer->Vertex1,Pointer->Vertex2);
printf("(%d)",Pointer->Weight);
Weight+=Pointer->Weight;
EdgeNum++;//±ßÊýÔö¼Ó1
Visited[Pointer->Vertex1]=1; //ÉèΪÒѲéÕÒ
Visited[Pointer->Vertex2]=1;//ÉèΪÒѲéÕÒ
}
Pointer=Pointer->Next;//ÍùÏÂÒ»¸ö½Úµã

if(Pointer==NULL)//ÒÑÎÞ±ßʱ
{
printf("No Spanning Tree\n");
break;
}
}
printf("\nTotalweight=%d\n",Weight);//Êä³ö¼ÓȨֵ×ܺÍ
}

/* ------------------------------------------------------------------------- */
/* Êä³öÁ´±íÊý¾Ý */
/* ------------------------------------------------------------------------- */
void Print_Edge(Edge Head)
{
Edge Pointer;//½ÚµãÉêÃ÷
Pointer=Head;//pointerÖ¸ÕëÉèΪÊ×½Úµã
while(Pointer!=NULL)//µ±½ÚµãΪNULLʱ½áÊøÑ­»·
{
printf("[%d,%d]",Pointer->Vertex1,Pointer->Vertex2);
printf("(%d)",Pointer->Weight);//Êä³ö¼ÓȨֵ
Pointer=Pointer->Next;//ÍùÏÂÒ»¸ö½Úµã
}
printf("\n");
}

/* ------------------------------------------------------------------------ */
/* µÝÔö²åÈëÁÚ½Ó±ßÖÁÁ´±íÄÚ */
/* ------------------------------------------------------------------------ */

adsfdda 2005-12-02
  • 打赏
  • 举报
回复
晕,等看懂了,也死掉了,谁还有气帮你就错啊~
guyanhun 2005-12-02
  • 打赏
  • 举报
回复
拼写错误
jixingzhong 2005-12-02
  • 打赏
  • 举报
回复
把你的注释 整理了再发上来吧 ~
这样看 实在是累 ...

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧