实验六图基本操作的编程实现Word下载.docx
- 文档编号:17333955
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:16
- 大小:17.74KB
实验六图基本操作的编程实现Word下载.docx
《实验六图基本操作的编程实现Word下载.docx》由会员分享,可在线阅读,更多相关《实验六图基本操作的编程实现Word下载.docx(16页珍藏版)》请在冰豆网上搜索。
/*===============================================*/
/*输出邻接矩阵数据===============================*/
voidprint_M_Graph()
{
inti,j;
printf("
Vertice"
);
for(i=0;
i<
Max;
i++)
%3d"
i);
\n"
for(i=0;
{
%4d"
for(j=0;
j<
j++)
}
}
/*以邻接矩阵建立图形=============================*/
voidCreate_M_Graph(intVerticel,intVertice2)
Graph[Verticel][Vertice2]=1;
/*将矩阵容设为1*/
/*主程序=========================================*/
voidmain()
intSource;
/*起始顶点*/
intDestination;
/*终止顶点*/
Graph[i][i]=0;
while
(1)
pleaseinputtheEdge'
ssource:
"
scanf("
%d"
&
Source);
if(Source==-1)
break;
PleaseinputtheEdge'
sDestination:
Destination);
if(Source==Destination)/*出错:
自身循环*/
***Error***:
SelfLoop!
!
\n"
elseif(Source>
=Max||Destination>
=Max)/*出错:
超出围*/
printf("
outofrange!
else/*调用建立邻接数组*/
Create_M_Graph(Source,Destination);
##Graph##\n"
;
/*调用输出邻接数组数据*/
/*希望的结果*/
/*pleaseinputtheEdge'
0*/
/*PleaseinputtheEdge'
4*/
1*/
2*/
3*/
-1*/
/*##Graph##*/
/*Vertice012345*/
/*0000010*/
/*1100010*/
/*2010000*/
/*3001000*/
/*4000100*/
/*5000000*/
(二)将一个将图转成邻接表的程序.
/*用户输入结点与各个边,再将边转成邻接链表。
#include<
stdlib.h>
#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=;
next=NULL;
searchP=&
(head[Vertex1]);
while(searchP->
next!
=NULL)
searchP->
next=New;
/*输出邻接链表的数据===============================*/
voidprint_l_graph(structnode*head)
searchP=head->
next;
while(searchP!
[%d]"
searchP->
vertex);
searchP=searchP->
vertexnum;
head[i].vertex=i;
head[i].next=NULL;
elseif(Source>
=vertexnum||Destination>
=vertexnum)
/*出错:
else/*调用建立邻接链表*/
Create_l_Graph(Source,Destination);
=vertexnum;
vertex[%d]:
print_l_graph(&
head[i]);
/*调用输出邻接链表数据*/
5*/
/*Vertex[0]:
*/
/*Vertex[1]:
/*Vertex[2]:
[1][3]*/
/*Vertex[3]:
[4]*/
/*Vertex[4]:
[1][2][5]*/
/*Vertex[5]:
[1]*/
〔三〕图的深度优先遍历〔搜索〕。
/*递归调用深度优先搜索法,往下一个顶点查找,直到查找到列表尾端为止。
#defineVertexNum9/*定义顶点数*/
structNode/*声明图形顶点结构*/
intVertex;
/*邻接顶点数据*/
structNode*Next;
/*下一个邻接顶点*/
};
typedefstructNode*Graph;
/*定义图形结构*/
structNodeHead[VertexNum];
/*顶点数组*/
intVisited[VertexNum];
/*查找记录*/
/*==========================================*/
/*深度优先搜索==============================*/
voidDFS(intVertex)
GraphSearchP;
/*结点声明*/
Visited[Vertex]=1;
/*已查找*/
[%d]==>
Vertex);
SearchP=Head[Vertex].Next;
while(SearchP!
=NULL)
if(Visited[SearchP->
Vertex]==0)
/*递归调用*/
SearchP=SearchP->
Next;
/*下一个邻接点*/
/*建立邻接顶点至邻接列表==================*/
voidCreate_L_Graph(intVertex1,intVertex2)
GraphNew;
/*新顶点声明*/
New=(Graph)malloc(sizeof(structNode));
/*配置存*/
=NULL)/*配置成功*/
New->
Vertex=Vertex2;
/*邻近顶点*/
Next=NULL;
/*下一个邻接顶点指针*/
/*SearchP指针设为顶点数组之首结点*/
SearchP=&
(Head[Vertex1]);
while(SearchP->
Next!
/*往下一个结点*/
SearchP->
Next=New;
/*串连在尾端*/
/*输出邻接列表数据========================*/
voidPrint_L_Graph(structNode*Head)
SearchP=Head->
/*SearchP指针设为首结点*/
=NULL)/*当结点为NULL完毕循环*/
SearchP->
Vertex);
/*主程序====================================*/
inti;
intNode[20][2]={{1,2},{2,1},{1,3},{3,1},{2,4},{4,2},
{2,5},{5,2},{3,6},{6,3},{3,7},{7,3},
{4,8},{8,4},{5,8},{8,5},{6,8,},{8,6},{7,8},{8,7}};
VertexNum;
Head[i].Vertex=i;
Head[i].Next=NULL;
i<
i++)
Visited[i]=;
20;
Create_L_Graph(Node[i][0],Node[i][1]);
Vertex[%d]:
Print_L_Graph(&
Head[i]);
/*调用输出邻接列表数据*/
Depth-First-Search:
[BEGIN]==>
DFS
(1);
[END]\n"
[2][3]*/
[1][4][5]*/
[1][6][7]*/
[2][8]*/
/*Vertex[6]:
[3][8]*/
/*Vertex[7]:
/*Vertex[8]:
[4][5][6][7]*/
/*Detph-First-Search:
/*[BEGIN]==>
[1]==>
[2]==>
[4]==>
[8]==>
[5]==>
[6]==>
[3]==>
[7]==>
[END]*/
〔四〕图的广度优先遍历〔搜索〕。
/*查找顶点时,先将该顶点的邻接顶点皆存入队列中。
*/
/*〔关于队列的运用,之前的章节已有介绍,在此不再重复〕*/
/*如果邻接顶点已存在放队列中或已查找,如此不存入队列中,直到队列为空才完毕查找工作。
#defineQueueMax10
intQueue[QueueMax];
intFront=-1;
intRear=-1;
/*队列的存入================================*/
intEnqueue(intVertex)
if(Rear>
=QueueMax)/*队列已满*/
return-1;
else
Rear++;
/*队列尾端指针后移*/
Queue[Rear]=Vertex;
/*将值存入队列中*/
return1;
/*队列的取出================================*/
intDequeue()
if(Front>
=Rear)/*队列已空*/
Front++;
/*队头指针后移*/
returnQueue[Front];
/*广度优先搜索==============================*/
voidBFS(intVertex)
Enqueue(Vertex);
/*存入队列中*/
Visited[Vertex]=;
while(Front!
=Rear)/*队列为空时,完毕循环*/
Vertex=Dequeue();
=NULL)/*读入邻接列表所有顶点*/
Enqueue(SearchP->
Visited[SearchP->
Vertex]=1;
/*已查找过的顶点*/
New=(Graph)malloc(sizeof(s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验六 图基本操作的编程实现 实验 基本 操作 编程 实现