# 图（有向图、无向图）

8095人阅读 评论(1)

1 ．图的定义

1.3-1

V ＝｛ v 1 v 2 v 3 v 4

E ＝｛（ v 1 v 2），（ v 1 v 3），（ v 2 v 3），（ v 2 v 4），（ v 3 v 4）｝

V ＝｛ v 1 v 2 v 3 v 4

E ＝｛ <v 1 v 2 > <v 1 v 3 > <v 1 v 4 > <v 2 v 1 > <v 4 v 2 >}

2 ．图的常用术语

1.3-2

1. 　邻接矩阵存储

const  graph1:array[1..4,1..4] ofinteger=((0,1,1,0),(1,0,1,1),(1,1,0,1),(0,1,1,0));

graph2:array[1..4,1..4] ofinteger=((0,1,1,1),(1,0,0,0),(0,0,0,0),(0,1,0,0));

const  graph3:array[1..4,1..4] ofinteger=((0,3,4,0),(3,0,9,2),(4,9,0,6),(0,2,6,0));

var vi,vj,vn,ei,en,wn:integer;

graph:array[1..20,1..20]of integer;

Begin

forvi:=1 to vn do

for vj:=1 to vn do

graph[vi,vj]:=0;

forei:=1 to en do

begin

graph[vi,vj]:=wn;

graph[vj,vi]:=wn

end;

forvi:=1 to vn do

begin

for vj:=1 to vn dowrite(graph[vi,vj]:8);  { 输出图

writeln

end

End.

2. 　邻接表存储

1. 　深度优先遍历

连通图的深度优先遍历的算法描述如下：（如果不是连通图则需多次使用遍历算法）

proceduredfs(vi:integer);

begin

write(graph[vi].v:4);  ｛输出顶点数值｝

visited[vi]:=true;      { 设置已访问标记

while last<>nil do

begin

last:=last^.next

end

end;

2. 　广度优先遍历

1 ．一笔画问题

1.3-5

programstroke(input,output);

vargraph:array[1..20,1..20] of 0..1;

degree:array[1..20] of integer;

odd_num,vn,vi,vj,start,total_d:integer;

begin

odd_num:=0;total_d:=0;start:=1;

write('please input the number of vertex:');

writeln('please input the data:');

for vi:=1 to vn do

begin

degree[vi]:=0;

for vj:=1 to vn do

begin

degree[vi]:=degree[vi]+graph[vi,vj] ｛求每个顶点的度数｝

end;

total_d:=total_d+degree[vi]; 　｛求总的度数｝

if odd(degree[vi]) then

begin

odd_num:=odd_num+1; ｛统计奇数顶点的个数｝

start:=vi　　｛确认从奇数顶点出发｝

end

end;

if odd_num>2 then writeln('no solution') ｛奇数顶点超过两个显示无解｝

else

begin

write('the road is: ',start);

vi:=0;

while total_d>2 do

begin

repeat vi:=vi+1 until graph[start,vi]<>0; ｛找连接的相邻点｝

if degree[vi]>1 then 　｛先画度数大于 1的顶点｝

begin

write('->',vi);

graph[start,vi]:=0;

graph[vi,start]:=0;

degree[vi]:=degree[vi]-1;

degree[start]:=degree[start]-1;

total_d:=total_d-2;

start:=vi;

vi:=0

end

end;

repeat vi:=vi+1 until graph[start,vi]<>0; 　｛确认最后一笔｝

writeln('->',vi)

end

end.

please input the number of vertex:6

please input the data:

0 1 1 0 0 0

1 0 1 1 0 1

1 1 0 0 1 1

0 1 0 0 1 1

0 0 1 1 0 1

0 1 1 1 1 0

1
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：661886次
• 积分：5879
• 等级：
• 排名：第4335名
• 原创：86篇
• 转载：104篇
• 译文：0篇
• 评论：73条