Graph[i][i]=0;
while
(1)
{
printf("pleaseinputtheEdge'ssource:
");
scanf("%d",&Source);
if(Source==-1)
break;
printf("PleaseinputtheEdge'sDestination:
");
scanf("%d",&Destination);
if(Source==Destination)/*出错:
自身循环*/
printf("***Error***:
SelfLoop!
!
\n");
elseif(Source>=Max||Destination>=Max)/*出错:
超出范围*/
printf("***Error***:
outofrange!
!
\n");
else/*调用建立邻接数组*/
Create_M_Graph(Source,Destination);
}
printf("##Graph##\n");
;/*调用输出邻接数组数据*/
}
/*希望的结果*/
/*pleaseinputtheEdge'ssource:
0*/
/*PleaseinputtheEdge'sDestination:
4*/
/*pleaseinputtheEdge'ssource:
1*/
/*PleaseinputtheEdge'sDestination:
0*/
/*pleaseinputtheEdge'ssource:
1*/
/*PleaseinputtheEdge'sDestination:
4*/
/*pleaseinputtheEdge'ssource:
2*/
/*PleaseinputtheEdge'sDestination:
1*/
/*pleaseinputtheEdge'ssource:
3*/
/*PleaseinputtheEdge'sDestination:
2*/
/*pleaseinputtheEdge'ssource:
4*/
/*PleaseinputtheEdge'sDestination:
3*/
/*pleaseinputtheEdge'ssource:
-1*/
/*##Graph##*/
/*Vertice012345*/
/*0000010*/
/*1100010*/
/*2010000*/
/*3001000*/
/*4000100*/
/*5000000*/
(二)将一个将图转成邻接表的程序.
/*程序构思:
*/
/*用户输入结点与各个边,再将边转成邻接链表。
*/
#include
#include
#definevertexnum6/*定义最大可输入的结点个数*/
typedefstructnode/*定义图形的顶点结构*/
{
intvertex;
structnode*next;
}Graph;
Graphhead[vertexnum];
/*===============================================*/
/*以邻接链表建立图形=============================*/
/*===============================================*/
voidCreate_l_Graph(intVertex1,intVertex2)
{
Graph*searchP;/*结点声明*/
Graph*New;/*新结点声明*/
New=(Graph*)malloc(sizeof(structnode));
if(New!
=NULL)
{
New->vertex=;
New->next=NULL;
searchP=&(head[Vertex1]);
while(searchP->next!
=NULL)
;
searchP->next=New;
}
}
/*===============================================*/
/*输出邻接链表的数据===============================*/
/*===============================================*/
voidprint_l_graph(structnode*head)
{
Graph*searchP;
searchP=head->next;
while(searchP!
=NULL)
{
printf("[%d]",searchP->vertex);
searchP=searchP->next;
}
printf("\n");
}
/*===============================================*/
/*主程序=========================================*/
/*===============================================*/
voidmain()
{
intSource;/*起始顶点*/
intDestination;/*终止顶点*/
inti,j;
for(i=0;i{
head[i].vertex=i;
head[i].next=NULL;
}
while
(1)
{
printf("pleaseinputtheEdge'ssource:
");
scanf("%d",&Source);
if(Source==-1)
break;
printf("PleaseinputtheEdge'sDestination:
");
scanf("%d",&Destination);
if(Source==Destination)/*出错:
自身循环*/
printf("***Error***:
SelfLoop!
!
\n");
elseif(Source>=vertexnum||Destination>=vertexnum)
/*出错:
超出范围*/
printf("***Error***:
outofrange!
!
\n");
else/*调用建立邻接链表*/
Create_l_Graph(Source,Destination);
}
printf("##Graph##\n");
for(i=0;i<=vertexnum;i++)
{
printf("vertex[%d]:
",i);
print_l_graph(&head[i]);/*调用输出邻接链表数据*/
}
}
/*希望的结果*/
/*pleaseinputtheEdge'ssource:
2*/
/*PleaseinputtheEdge'sDestination:
1*/
/*pleaseinputtheEdge'ssource:
2*/
/*PleaseinputtheEdge'sDestination:
3*/
/*pleaseinputtheEdge'ssource:
3*/
/*PleaseinputtheEdge'sDestination:
4*/
/*pleaseinputtheEdge'ssource:
4*/
/*Pleaseinputthe