آموزش ساختمان داده ها - بخش هفتم

Preview:

Citation preview

ساختمان داده ها

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