¡¶µÚ7Õ ͼ½á¹¹¡·Ï°Ìâ½â´ð ÏÂÔØ±¾ÎÄ

µÚ7Õ ͼ½á¹¹

º¯Êývoid DisplyAMLG(AMLGraph G)°´ÁÚ½Ó±íµÄ·½Ê½ÏÔʾµ±Ç°ÁÚ½Ó¶àÖØÁ´±í±íʾµÄÎÞÏòͼGµÄÏà¹ØÐÅÏ¢¡£

void DisplyAMLG(AMLGraph G) { int i; EBox* p; cout<<\°´ÁÚ½Ó±íÏÔʾ½á¹ûΪ£º\\n\ for(i=0;iivex==i) cout<<'['<ivex<<' '<jvex; else cout<<'['<jvex<<' '<ivex; if(G.kind==DN)cout<<' '<info; cout<<\ if(p->ivex==i) p=p->ilink; //Ö¸ÕëÖ¸ÏòÏÂÒ»¸ö±ß½áµã else p=p->jlink; } cout<

³ÌÐòÖзֱð½¨Á¢Ò»¸öÎÞÏòͼ(G1)ºÍÒ»¸öÎÞÏòÍø(G2)µÄÁÚ½Ó¶àÖØÁ´±í£¬²¢°´ÁÚ½Ó±íµÄÐÎʽÏÔʾËù½¨Á¢µÄµÄÁÚ½Ó¶àÖØÁ´±íµÄÄÚÈÝ¡£

void main()

{ AMLGraph G1,G2; GKind gk1=DG,gk2=DN; cout<<\½¨Á¢Ò»¸öÎÞÏòͼµÄÁÚ½Ó¶àÖØÁ´±íG1:\\n\ CreateGraph_AMLG(G1,gk1); cout<<\½¨Á¢Ò»¸öÎÞÏòÍøµÄÁÚ½Ó¶àÖØÁ´±íG2:\\n\ CreateGraph_AMLG(G2,gk2); cout<<\ÎÞÏòͼG1µÄÐÅϢΪ:\\n\ DisplyAMLG(G1); cout<<\ÎÞÏòÍøG2µÄÐÅϢΪ:\\n\ DisplyAMLG(G2); }³ÌÐòÔËÐÐÑÝʾ½á¹ûΪ£º

½¨Á¢Ò»¸öÎÞÏòͼµÄÁÚ½Ó¶àÖØÁ´±íG1:

ÊäÈë¶¥µãÊýºÍ±ßÊývexnum edgenum:4 5¨L °´Ä³ÖÖ˳ÐòÊäÈë4¸ö¶¥µãµÄÖµ: 1 2 3 4¨L

ÊäÈëͼÖÐ5Ìõ±ßµÄÐÅÏ¢u v: 1 2 1 3 1 4 2 3 2 4¨L

½¨Á¢Ò»¸öÎÞÏòÍøµÄÁÚ½Ó¶àÖØÁ´±íG2:

ÊäÈë¶¥µãÊýºÍ±ßÊývexnum edgenum:4 5¨L

-.187.-

µÚ7Õ ͼ½á¹¹

°´Ä³ÖÖ˳ÐòÊäÈë4¸ö¶¥µãµÄÖµ: 1 2 3 4¨L

ÊäÈëͼÖÐ5Ìõ±ßºÍȨµÄÐÅÏ¢u v w: 1 2 3 1 3 6 1 4 4 2 3 5 2 4 8¨L ÎÞÏòͼG1µÄÐÅϢΪ: °´ÁÚ½Ó±íÏÔʾ½á¹ûΪ£º 0 (1): [0 3] [0 2] [0 1] 1 (2): [1 3] [1 2] [1 0]

2 (3): [2 1] [2 0] 3 (4): [3 1] [3 0]

ÎÞÏòÍøG2µÄÐÅϢΪ: °´ÁÚ½Ó±íÏÔʾ½á¹ûΪ£º 0 (1): [0 3 4] [0 2 6] [0 1 3] 1 (2): [1 3 8] [1 2 5] [1 0 3] 2 (3): [2 1 5] [2 0 6] 3 (4): [3 1 8] [3 0 4]

˵Ã÷£º

£¨1£©³ÌÐòÑÝʾÖÐËù½¨Á¢µÄÊÇͼ7.18ÖÐÎÞÏòͼ(a)ºÍÎÞÏòÍø(b)µÄÁÚ½Ó¶àÖØÁ´±íµÄÒ»ÖÖ±íʾ¡£

£¨2£©´Ó´æ´¢½á¹¹¿ÉÒÔ¿´³ö£¬ÔÚÁÚ½Ó¶àÖØ½á¹¹´æ´¢µÄÁ´±íÖкÜÈÝÒ×Ëã³öÒ»¸ö¶¥µãµÄ¶È£¬²¢ÇÒ½¨Á¢ÁÚ½Ó¶àÖØÁ´±íµÄʱ¼ä¸´ÔÓ¶ÈÓ뽨Á¢ÁÚ½Ó±íµÄʱ¼ä¸´ÔÓ¶ÈÏàͬ£¬ËùÒÔÔÚÎÞÏòͼ£¨»òÍø£©µÄÓ¦ÓÃÖУ¬³£³£ÓÃÁÚ½Ó¶àÖØÁ´±í×÷Ϊ´æ´¢½á¹¹¡£

7.3ͼµÄ±éÀú

´ÓͼÖÐijһ¶¥µã³ö·¢£¬·ÃÎÊͼÖÐÆäÓà¸÷¶¥µã£¬¶øÇÒÿ¸ö¶¥µã½ö±»·ÃÎÊÒ»´ÎµÄ¹ý³Ì³ÆÎªÍ¼µÄ±éÀú¡£Í¼µÄ±éÀúËã·¨ÊÇͼµÄÖî¶àÓ¦ÓÃÖеĻù´¡£¬ÀýÈçÇó½âͼµÄÁ¬Í¨ÐÔ¡¢Éú³ÉÊ÷¡¢ÍØÆËÅÅÐò¡¢¹Ø¼ü·¾¶µÈÎÊÌâÖж¼ÊÇÒÔͼµÄ±éÀúË㷨Ϊ»ù´¡¡£

ͼµÄ±éÀú±ÈÊ÷µÄ±éÀúÒª¸´Ôӵö࣬ÒòΪͼÖÐÈÎÒâÁ½¸ö¶¥µãÖ®¼ä¶¼¿ÉÄÜÓбߣ¨»ò»¡£©´æÔÚ£¬ËùÒÔÔÚ·ÃÎÊÁËij¸ö¶¥µãÖ®ºó£¬¿ÉÄÜÑØ×Åij¸ö·¾¶Óֻص½¸Ã¶¥µãÉÏ£¬ÓÉ´Ë¿ÉÄܵ¼ÖÂij¸ö¶¥µãÔÚ±éÀúµÄ¹ý³ÌÖб»·ÃÎʶà´Î¡£ÎªÁ˱£Ö¤ÔÚ±éÀú¹ý³ÌÖÐÿ¸ö¶¥µã½ö±»·ÃÎÊÒ»´Î£¬±ØÐë¼ÇÏÂÒÑ·ÃÎʹýµÄ¶¥µã¡£Í¨³£ÐèÒªÉèÁ¢Ò»¸öһάÊý×évisited[]£¬ÆäÖÐÿ¸öÔªËØ¶ÔӦͼÖÐij¸ö¶¥µã±»·ÃÎʵĴÎÊý£¬±éÀúǰËüÃǵÄÖµ¾ùΪ0£¬±íʾÏàÓ¦µÄ¶¥µãδ±»·ÃÎʹý£¬Ò»µ©¸Ã¶¥µã±»·ÃÎÊÔòÊý×évisitedÖÐÏàÓ¦µÄÔªËØÖµ±äΪ1¡£ÎªÁË·½±ãÆð¼û£¬ÎÒÃÇÔÚͼµÄÁÚ½Ó¾ØÕóºÍÁÚ½Ó±í´æ´¢µÄ¶¥µãÐòÁÐvexs[]£¨ÁÚ½Ó¾ØÕ󣩺Ívertices[]£¨ÁÚ½Ó±í£©ÖоùÔöÉèÁËÓÃÓÚ±íʾ¸Ã¶¥µãÊÇ·ñ±»·ÃÎʹýµÄ±êÖ¾Óòflag¡£

ͼµÄ±éÀúË㷨ͨ³£ÓÐÉî¶ÈÓÅÏÈËÑË÷(depth first search)ºÍ¹ã¶È¶ÈÓÅÏÈËÑË÷(breadth first search)Á½ÖÖ¡£

7.3.1ͼµÄÉî¶ÈÓÅÏÈËÑË÷

1£®Éî¶ÈÓÅÏȱéÀúµÄ¶¨Òå

ͼµÄÉî¶ÈÓÅÏÈËÑË÷ÀàËÆÓÚÊ÷µÄÏȸù±éÀú£¬ÊÇÊ÷µÄÏȸù±éÀúµÄÍÆ¹ã¡£Éè³õʼ״̬ÊÇͼÖеÄËùÓж¥µã¾ùδ±»·ÃÎÊ¡£Éî¶ÈÓÅÏȱéÀú¹ý³ÌΪ£º

Ê×ÏÈ·ÃÎÊÖ¸¶¨µÄÆðʼ¶¥µãu£¬È»ºóѡȡÓëuÁÚ½ÓµÄδ±»·ÃÎʵÄÈÎÒ»¶¥µãv·ÃÎÊÖ®£¬ÔÙѡȡÓëvÁÚ½ÓµÄδ±»·ÃÎʵÄÈÎÒ»¶¥µãw·ÃÎÊÖ®¡£Öظ´½øÐÐÒÔÉÏ·ÃÎʹý³Ì£¬µ±µ½´ïÒ»¸öËùÓÐÁÚ½Ó¶¥

-.188.-

µÚ7Õ ͼ½á¹¹

µã¶¼±»·ÃÎʹýµÄ¶¥µãʱ£¬ÔòÒÀ´ÎÍ˻ص½×î½ü±»·ÃÎʹýµÄ¶¥µã¡£ÈôËü»¹ÓÐÁڽӵĶ¥µãδ±»·ÃÎʹý£¬Ôò´ÓÕâЩδ±»·ÃÎʹýµÄ¶¥µãÖÐÈÎÒâѡȡһ¸ö¶¥µã£¬Öظ´ÉÏÊö¹ý³Ì£¬Ö±µ½ËùÓеĶ¥µã¶¼±»·ÃÎʹýΪֹ¡£ ˵Ã÷£º

(1) ͼµÄÉî¶ÈÓÅÏÈËÑË÷·¨µÄ±éÀú¹ý³ÌÊÇÒ»¸öµÝ¹é¹ý³Ì£»

(2) ¸ù¾ÝÉî¶ÈÓÅÏÈËÑË÷µÄ¶¨Òå¿ÉÖª£¬Í¬Ò»¸öͼ£¬´Óͬһ¸ö¶¥µã¿ªÊ¼£¬¿ÉÒԵõ½¶àÖÖ²»Í¬µÄÉî¶ÈÓÅÏȱéÀúÐòÁС£ËùÒÔ£¬Í¼µÄÉî¶ÈÓÅÏȱéÀúÐòÁв»Î¨Ò»¡£ ÀýÈ磺

(1) ͼ7.18ËùʾµÄÎÞÏòͼ£¬´Ó¶¥µã1¿ªÊ¼µÄÉî¶ÈÓÅÏȱéÀúÐòÁÐÓÐÒÔÏÂ4ÖÖ£º 1) 1¡¢2¡¢3¡¢4£»2) 1¡¢2¡¢4¡¢3£»3) 1¡¢4¡¢2¡¢3£»4) 1¡¢3¡¢2¡¢4¡£

(2) ͼ7.11(b)ËùʾµÄÎÞÏòͼ£¬´Ó¶¥µãv1¿ªÊ¼µÄÉî¶ÈÓÅÏȱéÀúÐòÁÐÓÐÒÔÏÂ5ÖÖ£º 1) v1£¬v2£¬v5£¬v3£¬v4£»2) v1£¬v2£¬v5£¬v4£¬v3£»3) v1£¬v3£¬v4£¬v5£¬v2£» 4) v1£¬v3£¬v5£¬v2£¬v4£»5) v1£¬v3£¬v5£¬v4£¬v2¡£

(3) ͼ7.15ËùʾµÄÓÐÏòͼ£¬´Ó¶¥µãv1¿ªÊ¼µÄÉî¶ÈÓÅÏȱéÀúÐòÁÐÓÐÒÔÏÂ2ÖÖ£º 1) v1£¬v2£¬v3£¬v4£» 2) v1£¬v3£¬v4£¬v2¡£ (4) ͼ7.19ËùʾµÄÎÞÏòͼ£¬´Ó¶¥µã1¿ªÊ¼£¬°´¶¥µã±àºÅµÝÔö˳Ðò½øÐÐÉî¶ÈÓÅÏȱéÀúµÄÐòÁÐΪ£º

1¡¢2¡¢4¡¢8¡¢5¡¢6¡¢3¡¢7¡£

´Ó¶¥µã1¿ªÊ¼£¬°´¶¥µã±àºÅµÝ¼õ˳Ðò½øÐÐÉî¶ÈÓÅÏȱéÀúµÄÐòÁÐΪ£º

1¡¢3¡¢7¡¢8¡¢6¡¢5¡¢2¡¢4¡£

2£®Éî¶ÈÓÅÏȱéÀúµÄË㷨ʵÏÖ

Éî¶ÈÓÅÏÈËã·¨£¬ÔÚ±éÀúµÄ¹ý³ÌÖÐÐèÒª·ÃÎÊÁÚ½Ó±íGµÄ±êÖ¾Êý×éG.vertices[v].flag£¬¶¥µãÒ»µ©±»·ÃÎÊÔòÆäÏàÓ¦µÄ±êÖ¾ÓÉ0ÐÞ¸ÄΪ1¡£ (1)¶ÔÁ¬Í¨·ÖÁ¿µÄÉî¶ÈÓÅÏȱéÀú

º¯Êývoid DFS_ALG(ALGraph &G,int v)µÄ¹¦ÄÜÊÇ£¬¶ÔÒÔÁÚ½Ó±í·½Ê½´æ´¢µÄͼG£¬´Ó¶¥µã±àºÅΪvµÄ¶¥µã¿ªÊ¼£¬ÓõݹéµÄ·½Ê½£¬Éî¶ÈÓÅÏȱéÀú¸Ã¶¥µãËùÔÚµÄÁ¬Í¨·ÖÁ¿¡£

void DFS_ALG(ALGraph &G,int v) { int w; ArcNode* p; cout<nextarc) //½øÈëÏÂÒ»²ã { w=p-> adjvex;

-.189.-

µÚ7Õ ͼ½á¹¹

}

}

if(!G.vertices[w].flag)DFS_ALG(G,w); //ͨ¹ýµÝ¹éµ÷ÓÃʵÏÖÉî¶ÈÓÅÏȱéÀú

(2)¶ÔͼµÄÉî¶ÈÓÅÏȱéÀú

º¯Êývoid DFSTraverse_ALG(ALGraph G)µÄ¹¦ÄÜÊÇ£¬Í¨¹ýÖØ¸´µ÷Óú¯ÊýDFS_ALG(G,v)ʵÏÖ¶ÔÁÚ½Ó±íGµÄÉî¶ÈÓÅÏȱéÀú¡£

void DFSTraverse_ALG(ALGraph G) { int v; for(v=0;v

Ö÷º¯ÊýÊ×ÏȽ¨Á¢ÓÐÏòͼG1ºÍÎÞÏòͼG2µÄÁÚ½Ó±í£¬ÔÙ·Ö±ð¶ÔÆä½øÐÐÉî¶ÈÓÅÏȱéÀú²¢ÏÔʾÊä³öÁÚ½Ó±íºÍ±éÀúÐòÁС£

void main()

{ ALGraph G1,G2; GKind gk1=DG,gk2=UDG; cout<<\½¨Á¢Ò»¸öÓÐÏòͼµÄÁÚ½Ó±íG1:\\n\ CreateGraph_AL(G1,gk1); cout<<\½¨Á¢Ò»¸öÎÞÏòͼµÄÁÚ½Ó±íG2:\\n\ CreateGraph_AL(G2,gk2); cout<<\ÓÐÏòͼG1µÄÁÚ½Ó±íΪ:\\n\ DisplyAL(G1);

cout<<\ÓÐÏòͼG1µÄÉî¶ÈÓÅÏȱéÀúÐòÁÐΪ:\\n\ DFSTraverse_ALG(G1); cout<<\ÎÞÏòͼG2µÄÁÚ½Ó±íΪ:\\n\ DisplyAL(G2);

cout<<\ÎÞÏòͼG2µÄÉî¶ÈÓÅÏȱéÀúÐòÁÐΪ:\\n\ DFSTraverse_ALG(G2); }³ÌÐòÔËÐÐÑÝʾ½á¹ûÈçÏ£º

½¨Á¢Ò»¸öÓÐÏòͼµÄÁÚ½Ó±íG1:

ÊäÈë¶¥µãÊýºÍ±ß(»¡)Êývexnum arcnum:6 10¨L °´Ä³ÖÖ˳ÐòÊäÈë6¸ö¶¥µãµÄÖµ: 1 2 3 4 5 6¨L ÊäÈëͼÖÐ10Ìõ±ß(»¡)µÄÐÅÏ¢u v:

1 4 1 2 3 5 3 2 4 5 4 2 5 2 5 1 6 5 6 3¨L

½¨Á¢Ò»¸öÎÞÏòͼµÄÁÚ½Ó±íG2:

ÊäÈë¶¥µãÊýºÍ±ß(»¡)Êývexnum arcnum:8 10¨L °´Ä³ÖÖ˳ÐòÊäÈë8¸ö¶¥µãµÄÖµ: 1 2 3 4 5 6 7 8¨L ÊäÈëͼÖÐ10Ìõ±ß(»¡)µÄÐÅÏ¢u v:

1 3 1 2 2 5 2 4 3 7 3 6 8 7 8 6 8 5 8 4¨L ÓÐÏòͼG1µÄÁÚ½Ó±íΪ: 0 (1): [1] [3] 1 (2):

2 (3): [1] [4] 3 (4): [1] [4] 4 (5): [0] [1] 5 (6): [2] [4]

ÓÐÏòͼG1µÄÉî¶ÈÓÅÏȱéÀúÐòÁÐΪ:

-.190.-