ساختمان داده ها
faradars.org/fvds9402
:مدرسفرشید شیرافکن
دانشگاه تهران دانشجوی دکتری (بیو انفورماتیک: دکتری( )کامپیوتر نرم افزار: کارشناسی و کارشناسی ارشد )
فصل هفتم
گراف
1
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
تعریف
2
Gگراف = (V,E)،مجموعهدوشاملVوEاست.V:رئوسازغيرتهيومحدودمجموعهE:(يال)رئوسزوجازمجموعهاي
گرافانواع:جهت دار-1
باشد،داشتهاهميتمرتبزوجدرگرههاترتيب:جهت دارغیر-2
.باشدنداشتهاهميتيالهامجموعهدررأسدوجايآندركهگرافي
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
تعریف
3
مثال
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
درجه گراف
مثال
4
ab
cd
deg-(a) = 1
deg+(a) = 2
deg-(d) = 2
deg+(d) = 1
deg-(c) = 0
deg+(c) = 2
deg-(b) = 4
deg+(b) = 2فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
گرافچندگانه
.مجازباشد(Multi Edge)گرافيكهدرآنيالهايچندگانه
5
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
گرافكامل
.آنرسمشدهباشديالهايگرافبدونجهتيكههمه
:يالهايتعدادn-1:هريکازگرههادرجه
6
2
)1( nn فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
گرافهمبند
.گرافيكهيکمسيربينهردوگرهآنوجودداشتهباشد:يکگرافناهمبند
وهميکvبهuهميکمسيرازv,uجهتداريكهبرايهرزوجگرهگراف: قوی همبند گراف .وجودداشتهباشدuبهvمسيراز
7
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
(Bipartite)گرافدوقسمتي
مجموعهازنوديگرافايندريالهر.هستندVوUمستقلمجموعهدوبهبنديدستهقابلآننودهايكهگرافيUمجموعهدرنوديبهراVصورتبهمعموالراگرافاين.كندميوصلG=(V,U,E)دهندمينمايش.
8
v5
v1
v2
v3 v4
v6 v1 v6
v2v5
v3v4
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
.داردفردطولبهسیکلدارایچون.نیستقسمتیدوزیرگراف•
9
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
گراف دو قسمتی کامل
m=5,n=3:مثال•
10
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
(subgraph)زیرگراف
:استكهH=(W,F)،يکگرافG=(V,E)يکزيرگرافازگراف
WV
and
FE
11
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
نمایش گراف
(Adjacency matrices)ماتريسهمجواري-1
(Adjacency List)ليستهمجواري-2
12
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
ماتریس همجواری
مثال
13
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
لیست همجواری
ليستهمجواري
14
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
(ماتريسبرخورد)مثال
راjراسiلبهاگرچنانچهباشد،ميستونوسطرباماتريسيکجهت،بدونگرافيکبرايماتريساين.بودخواهد1برابرjستونوiسطردرواقعدرايهكند،آنگاهتالقي
15
a
b
c
d
12
4
53
6
001110
111000
000101
010011
654321
M
VE
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
Connectivity
16
•a
b
c
d
a
b
c
d
Weakly connected
no path from b to d.
Strongly connected
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
پیمایش گراف
DFS)(عمقـاولپيمايش)عمقي-1 : Depth First Search)
BFS)(عرض-اولپيمايش)سطحي-2 : Breadth First Search)
.ميشوداستفادهصفازBFSپيمايشدروپشتهازDFSپيمايشدر
17
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
(BFS)پيمايشسطحي
بهچپازگرهفرزندان)آنبامجاورگرههايكليهسپسوكردهصفواردراگرهابتداگره،يکازشروعبا.كنيمميدرجصفدررا(راست.كنيمميدرجراآنمجاورهايگرهوكردهحذفراصفازبعديعنصرحال.شوندپيمايشهاگرههمهتادادهادامهراعملاين
.نیستفردبهمنحصرسطحیپیمایش
18
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
پيمايشسطحي
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
.گرافزيررامشخصكنيدBFSيكيازپيمايشهاي
A B C D E F G H
20
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
مثال
21
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
.رامشخصكنيد2گرافزيرباشروعازگرهشمارهBFSيكيازپيمايشهاي
2 , 6 , 1 , 3 , 7 , 5 , 4 , 8
22
2
16
731
573
457
845
84
8
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
r s t u
v w x y
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
r s t u
v w x y
sQ:
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
r s t u
v w x y
wQ: r
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
r s t u
v w x y
rQ: t x
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
r s t u
v w x y
Q: t x v
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
r s t u
v w x y
Q: x v u
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
r s t u
v w x y
Q: v u y
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
r s t u
v w x y
Q: u y
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
r s t u
v w x y
Q: y
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
1r s t u
v w x y
Q: Ø
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
.گرافزيرمشخصكنيدبرايBFSچندپيمايش
A B C D E F
A D B C E F
A D B C F E
33
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
سطحیتابع پیمایش
bfs(v){
front = rear = NULL;
cout << v;
visited[v] = TRUE;
addq ( &front , &rear , v );
while ( front) {
v = deleteq (&front);
for ( w = graph[v] ; w ; w = w->link )
if ( !visited[w -> vertex] ) {
cout << w -> vertex;
addq ( &front , &rear , w -> vertex );
visited[ w -> vertex ]=TRUE;
}}}
34
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
(DFS)پيمايشعمقي
يمپيمايشعمقآخرينتاراچپسمتگرههايكليهسپسوكردهمالقاتراآنگره،يکازشروعبا.كنيمرههايگتمامياباشدنداشتههمجواريگرههيچكهشودمالقاتگرهايمتوالي،هايرفتنپاييندراگر
.دميشوتكرارفوقروندوميگيرندانجامباالسطحيکبهبرگشتباشد،شدهمالقاتآنهمجوار
.نيستفردبهمنحصرعمقيپيمايش
35
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
Depth-First Search (DFS)
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
.زيررامشخصكنيدگراف DFSيكيازپيمايشهاي
A B D F E C G
37
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
.زيررامشخصكنيدگراف DFSيكيازپيمايشهاي
a b c g d e f i h
38
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
.گرافزيرمشخصكنيدبراي DFSسهپيمايش
1 , 4 , 7 , 8 , 9 , 6 , 5 , 2 , 3
1 , 2 , 3 , 6 , 9 , 8 , 7 , 4 , 5
1 , 2 , 3 , 6 , 5 , 4 , 7 , 8 , 9
39
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
.گرافزيرمشخصكنيدبراي DFSچندپيمايش
A B E D F C
A B D F E C
A D E F B C
40
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
.آوريدزيررابهدستگرافDFSيكيازپيمايشهاي
A B F I H G C D E
41
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
مثال•
42
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
عمقیتابع پیمایش
dfs (v)
{
visited[v] = TRUE;
cout << v;
for ( w = graph[v] ; w ; w = w->link )
if ( ! Visited [w -> vertex] )
dfs ( w -> vertex );
}
43
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
طبقهبندييالها
.كردبنديطبقهرده،4به(DFS)عمقاولجستجويوسيلهبهتوانميراهايالtree)درختی-1 edge):كهياليDFSكندميمالقاتراآن.
forward)جلورو-2 edge):يال(a,b)كهDFSحاصل،جنگلدروكندنميمالقاتراآنbنوادهaاست.
back)برگشتی-3 edge):يال(a,b)كهDFSحاصل،جنگلدروكندنميمالقاتراآنaنوادهbاست.
cross)تقاطعی-4 edge):نباشندباالبنديدسته3دركههايييال.
.گويندمينيزطرفهدويالتقاطعي،يالبهوروپسيالبرگشتي،يالبه:تذكر
44
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
مثال
45
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
مشخصكردننوعيالهابراساسپيمايشعمقي
46
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
tree edge : (s,z) , (z,y) , (y,x) , (z,w) , (t,v) , (t,u)
forward edge : (s,w)
back edge : (x,z) , (u,t)cross edge : (w,x) , (v,w) , (v,s) , (u,v)
47
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
48
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
زمان کشف و زمان خاتمه
d[u] : when u is discoveredf[u] : when searching adj of u is finished
u
v w
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
d[u] = 1 u
v w
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
d[u] = 1 u
v w
d[v] = 2
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
d[u] = 1
d[v] = 2
f[v] = 3
u
v w
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
d[u] = 1
d[v] = 2
f[v] = 3
u
v w
d[w] = 4
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
d[u] = 1
d[v] = 2
f[v] = 3d[w] = 4
f[v] = 5
u
v w
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
d[u] = 1
f[u] = 6
d[v] = 2
f[v] = 3d[w] = 4
f[w] = 5
u
v w
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
1/u x
v y
zw
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
1/u x
2/v y
zw
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
1/u x
2/v 3/ y
zw
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
1/u 4/ x
2/v 3/ y
zw
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
1/u 4/5 x
2/v 3/ y
zw
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
1/u 4/5 x
2/v 3/6 y
zw
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
1/u 4/5 x
2/7v 3/6 y
zw
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
1/8u 4/5 x
2/7v 3/6 y
zw
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
1/8u 4/5 x
2/7v 3/6 y
z9/w
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
1/8u 4/5 x
2/7v 3/6 y
10/ z9/w
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
1/8u 4/5 x
2/7v 3/6 y
10/11 z9/w
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
1/8u 4/5 x
2/7v 3/6 y
10/11 z9/12w
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
68
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
نکات
:دار گراف جهت یک در جستجوی اول عمق
:استاگروفقطاگر Forwardيا Treeنوع از(u,v)يال-1
:استاگروفقطاگر Backازنوع(u,v)يال-2
:استاگروفقطاگرCrossازنوع(u,v)يال-3
69
uvvu ffdd
vuuv ffdd
uuvv fdfd
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
(topological sort)مرتب سازی توپولوژیکی
(Directed Acyclic Graph):قابلاجرااستDAGسازيتوپولوژيفقطبررويمرتب
70
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
:توپولوژيكيترتيبچند
0 1 3 2 4 5
0 1 3 2 5 4
0 1 2 3 4 5
71
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402مثال
:توپولوژيكيترتيبچند
72
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
(بر اساس زمان خاتمه)توپولوژیکیمرتب سازی
.ميكنيممالقاتخاتمههارابهترتيبنزوليزمانگره
t u v s z w y x
73
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
الگوریتم مرتب سازی توپولوژیکی
Topological-Sort(G)
1 call DFS(G) to compute finishing times f[v] for each vertex v
2 as each vertex is finished, insert it onto the front of a linked list
3 return the linked list of vertices
74
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
کمینهپوشای درخت
:گرافيکبراي(فراگير)پوشادرخت.دباشنداشتهچرخهيعنيباشددرختيکوبودهگرافدرموجودرئوسهمهحاويكهاستمتصلگرافزيريک
(MST)كمينهوزنباپوشادرخت:كمينهپوشايدرخت
MSTتعيينهايالگوريتم
كروسكال-1
پريم-2
75
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
(کروسکال)مثال
مثال•
76
5
1
A
H
B
F
E
D
C
G3
2
4
6
34
3
4
8
4
3
فرادرس10
FaraDars.org
امرتب کردن صعودی یال ه
edge dv
(D,E) 1
(D,G) 2
(E,G) 3
(C,D) 3
(G,H) 3
(C,F) 3
(B,C) 4
5
1
A
HB
F
E
D
C
G3
2
4
6
34
3
48
4
3
10edge dv
(B,E) 4
(B,F) 4
(B,H) 4
(A,H) 5
(D,F) 6
(A,B) 8
(A,F) 10
فرادرس
FaraDars.org
edge dv
(D,E) 1
(D,G) 2
(E,G) 3
(C,D) 3
(G,H) 3
(C,F) 3
(B,C) 4
5
1
A
HB
F
E
D
C
G3
2
4
6
34
3
48
4
3
10edge dv
(B,E) 4
(B,F) 4
(B,H) 4
(A,H) 5
(D,F) 6
(A,B) 8
(A,F) 10
فرادرس
FaraDars.org
edge dv
(D,E) 1
(D,G) 2
(E,G) 3
(C,D) 3
(G,H) 3
(C,F) 3
(B,C) 4
5
1
A
HB
F
E
D
C
G3
2
4
6
34
3
48
4
3
10edge dv
(B,E) 4
(B,F) 4
(B,H) 4
(A,H) 5
(D,F) 6
(A,B) 8
(A,F) 10
فرادرس
FaraDars.org
edge dv
(D,E) 1
(D,G) 2
(E,G) 3
(C,D) 3
(G,H) 3
(C,F) 3
(B,C) 4
5
1
A
HB
F
E
D
C
G3
2
4
6
34
3
48
4
3
10edge dv
(B,E) 4
(B,F) 4
(B,H) 4
(A,H) 5
(D,F) 6
(A,B) 8
(A,F) 10
فرادرس
FaraDars.org
edge dv
(D,E) 1
(D,G) 2
(E,G) 3
(C,D) 3
(G,H) 3
(C,F) 3
(B,C) 4
5
1
A
HB
F
E
D
C
G3
2
4
6
34
3
48
4
3
10edge dv
(B,E) 4
(B,F) 4
(B,H) 4
(A,H) 5
(D,F) 6
(A,B) 8
(A,F) 10
فرادرس
FaraDars.org
edge dv
(D,E) 1
(D,G) 2
(E,G) 3
(C,D) 3
(G,H) 3
(C,F) 3
(B,C) 4
5
1
A
HB
F
E
D
C
G3
2
4
6
34
3
48
4
3
10edge dv
(B,E) 4
(B,F) 4
(B,H) 4
(A,H) 5
(D,F) 6
(A,B) 8
(A,F) 10
فرادرس
FaraDars.org
edge dv
(D,E) 1
(D,G) 2
(E,G) 3
(C,D) 3
(G,H) 3
(C,F) 3
(B,C) 4
5
1
A
HB
F
E
D
C
G3
2
4
6
34
3
48
4
3
10edge dv
(B,E) 4
(B,F) 4
(B,H) 4
(A,H) 5
(D,F) 6
(A,B) 8
(A,F) 10
فرادرس
FaraDars.org
edge dv
(D,E) 1
(D,G) 2
(E,G) 3
(C,D) 3
(G,H) 3
(C,F) 3
(B,C) 4
5
1
A
HB
F
E
D
C
G3
2
4
6
34
3
48
4
3
10edge dv
(B,E) 4
(B,F) 4
(B,H) 4
(A,H) 5
(D,F) 6
(A,B) 8
(A,F) 10
فرادرس
FaraDars.org
edge dv
(D,E) 1
(D,G) 2
(E,G) 3
(C,D) 3
(G,H) 3
(C,F) 3
(B,C) 4
5
1
A
HB
F
E
D
C
G3
2
4
6
34
3
48
4
3
10edge dv
(B,E) 4
(B,F) 4
(B,H) 4
(A,H) 5
(D,F) 6
(A,B) 8
(A,F) 10
فرادرس
FaraDars.org
edge dv
(D,E) 1
(D,G) 2
(E,G) 3
(C,D) 3
(G,H) 3
(C,F) 3
(B,C) 4
5
1
A
HB
F
E
D
C
G3
2
4
6
34
3
48
4
3
10edge dv
(B,E) 4
(B,F) 4
(B,H) 4
(A,H) 5
(D,F) 6
(A,B) 8
(A,F) 10
فرادرس
FaraDars.org
edge dv
(D,E) 1
(D,G) 2
(E,G) 3
(C,D) 3
(G,H) 3
(C,F) 3
(B,C) 4
5
1
A
HB
F
E
D
C
G3
2
4
6
34
3
48
4
3
10edge dv
(B,E) 4
(B,F) 4
(B,H) 4
(A,H) 5
(D,F) 6
(A,B) 8
(A,F) 10
فرادرس
FaraDars.org
edge dv
(D,E) 1
(D,G) 2
(E,G) 3
(C,D) 3
(G,H) 3
(C,F) 3
(B,C) 4
5
1
A
HB
F
E
D
C
G3
2
4
6
34
3
48
4
3
10edge dv
(B,E) 4
(B,F) 4
(B,H) 4
(A,H) 5
(D,F) 6
(A,B) 8
(A,F) 10
فرادرس
FaraDars.org
edge dv
(D,E) 1
(D,G) 2
(E,G) 3
(C,D) 3
(G,H) 3
(C,F) 3
(B,C) 4
5
1
A
HB
F
E
D
C
G2
3
3
3
edge dv
(B,E) 4
(B,F) 4
(B,H) 4
(A,H) 5
(D,F) 6
(A,B) 8
(A,F) 10
Total Cost = 21
4
}not
considered
فرادرس
FaraDars.org
(پریم)مثال
A F
B C
D
E
2
7
45
8 6 4
5
3
8 فرادرس
FaraDars.org
A F
B C
D
E
2
7
45
8 6 4
5
3
8 فرادرس
FaraDars.org
A F
B C
D
E
2
7
45
8 6 4
5
3
8 فرادرس
FaraDars.org
A F
B C
D
E
2
7
45
8 6 4
5
3
8 فرادرس
FaraDars.org
A F
B C
D
E
2
7
45
8 6 4
5
3
فرادرس8
FaraDars.org
Total weight of tree: 18
A F
B C
D
E
2
7
45
8 6 4
5
3
فرادرس8
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
(cبه زبان )پیاده سازی گراف با لیست همجواری
int main ( ){
int v = 5;
struct Graph* g ;
g= createGraph(v);
addEdge (g , 0 , 1);
addEdge (g , 0 , 4);
addEdge (g , 1 , 2);
addEdge (g , 1 , 3);
addEdge (g , 1 , 4);
addEdge (g , 2 , 3);
addEdge (g , 3 , 4);
printGraph(g);
}
96
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
تعریف استراکچرها
struct Node {
int data;struct Node* next;
};
struct AdjList {
struct Node *head;};
struct Graph{int v;
struct AdjList* array;};
97
فرادرس
FaraDars.org
98
struct Node* newNode(int a){
struct Node* n;n = malloc(sizeof(struct Node));
n->data = a;n->next = NULL;return n;
}
فرادرس
FaraDars.org
99
Struct Graph* createGraph(int V){
struct Graph* g ;g= malloc(sizeof(struct Graph));g->v = v;g->array = malloc(v * sizeof(struct AdjList));int i;for (i = 0 ; i < v ; ++i)
g->array[i].head = NULL;return g;
}
فرادرس
FaraDars.org
100
void addEdge(struct Graph* g, int s, int d){
// Add an edge from source to dest.
struct Node* n = newNode(d);n->next = g->array[s].head;g->array[s].head = n;
// Since graph is undirected, add an edge from dest to source also
n = newNode(s);n->next = g->array[d].head;g->array[d].head = n;
}
فرادرس
FaraDars.org
101
void printGraph ( struct Graph* g ){
int i; struct Node* p ;for (i = 0 ; i < g->v ; ++i){
p= g->array[i].head;printf("vertex %d : ", i);while (p){
printf("-> %d", p-> data);p = p->next;
}printf("\n");
}}
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402كاربردهايپيمايشDFSFollowing are the problems that use DFS as a bulding block.
1) Topological Sorting
2) Detecting cycle in a graph
A graph has cycle if and only if we see a back edge during DFS.
3) For an unweighted graph, DFS traversal of the graph produces the minimum spanning
tree and all pair shortest path tree.
4) Finding Strongly Connected Components of a graph
102
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402كاربردهايگراف5) Path Finding
We can specialize the DFS algorithm to find a path between two given vertices u and z.i) Call DFS(G, u) with u as the start vertex.ii) Use a stack S to keep track of the path between the start vertex and the current vertex.iii) As soon as destination vertex z is encountered, return the path as the contents of the stack
6) Solving puzzles with only one solution, such as mazes.
7) To test if a graph is bipartite
We can augment either BFS or DFS when we first discover a new vertex, color itopposited its parents, and for each other edge, check it doesn’t link two vertices of the
same color. The first vertex in any connected component can be red or black!
103
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
104
این اسالید ها بر مبنای نکات مطرح شده در فرادرس« مجموعه فرادرس های ساختمان داده ها»
.تهیه شده است
.نماییدلینک زیر مراجعه برای کسب اطالعات بیشتر در مورد این آموزش به
faradars.org/fvds9402
فرادرس
FaraDars.org
Recommended