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

µÚ7Õ ͼ½á¹¹

}

ArcNode* p;

for(i=0;iadjvex<<\ else //¶ÔÓÚÍøÒªÊä³öϱêÓë¶ÔÓ¦µÄȨµÄÖµ cout<<'['<adjvex<<','<weight<<\ p=p->nextarc; } cout<

(5)ÑÝʾ³ÌÐòÖ÷º¯Êý

³ÌÐòÖзֱð½¨Á¢ÓÐÏòͼG1¡¢ÎÞÏòͼG2¡¢ÓÐÏòÍøG3ºÍÎÞÏòÍøG4µÄÁÚ½Ó±í£¬²¢ÏÔʾÊä³öËù½¨Á¢µÄÿ¸öÁÚ½Ó±íµÄÊý¾ÝÐÅÏ¢¡£

void main()

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

³ÌÐòÔËÐÐÑÝʾ½á¹ûΪ£º

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

ÊäÈë¶¥µãÊýºÍ±ß(»¡)Êývexnum arcnum:6 8¨L

-.179.-

µÚ7Õ ͼ½á¹¹

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

1 2 1 4 3 1 3 6 4 3 5 4 6 1 6 5¨L ½¨Á¢Ò»¸öÎÞÏòͼµÄÁÚ½Ó±íG2:

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

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

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

ÎÞÏòͼG2µÄÁÚ½Ó±íΪ: 0 (1): [3] [1] 1 (2): [5] [2] [0] 2 (3): [4] [1] 3 (4): [4] [0] 4 (5): [3] [5] [2] 5 (6): [4] [1]

*************************************** ½¨Á¢Ò»¸öÓÐÏòÍøµÄÁÚ½Ó±íG3:

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

ÊäÈëͼÖÐ4Ìõ±ß(»¡)ºÍȨµÄÐÅÏ¢u v w: 1 2 7 1 3 1 3 4 5 4 1 9¨L ½¨Á¢Ò»¸öÎÞÏòÍøµÄÁÚ½Ó±íG4:

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

ÊäÈëͼÖÐ5Ìõ±ß(»¡)ºÍȨµÄÐÅÏ¢u v w: 1 2 9 4 1 8 4 2 3 4 5 1 3 5 12¨L ÓÐÏòÍøG3µÄÁÚ½Ó±íΪ: 0 (1): [2,1] [1,7] 1 (2):

2 (3): [3,5] 3 (4): [0,9]

ÎÞÏòÍøG4µÄÁÚ½Ó±íΪ: 0 (1): [3,8] [1,9] 1 (2): [3,3] [0,9] 2 (3): [4,12]

3 (4): [4,1] [1,3] [0,8] 4 (5): [2,12] [3,1]

˵Ã÷£º £¨1£©³ÌÐòÑÝʾÖн¨Á¢µÄÊÇͼ7.1¡¢Í¼7.3ÖÐ4¸öͼµÄÒ»ÖÖÁÚ½Ó±í±íʾ£ºG1.vertices¡¢G2.vertices¡¢G3.verticesºÍG4.vertices¡£

£¨2£©ÔÚ³ÌÐòÏÔʾµÄ½á¹ûÖУ¬µÚÒ»ÁÐΪ¶¥µãµÄϱ꣬µÚ¶þÁÐΪͼÖÐËùÓж¥µãµÄÖµ¡£¶ÔÓÚͼ£¬µ¥Á´±íÖеÄÿһÏî±íʾ¸Ã¶¥µãµÄÁÚ½ÓµãµÄϱꣻ¶ÔÓÚÍø£¬µ¥Á´±íÖеÄÿһÏî±íʾ¸Ã¶¥µãµÄÁÚ½ÓµãµÄϱêÖµºÍÏàÓ¦±ß£¨»¡£©µÄȨֵ¡£

£¨3£©ÔÚ½¨Á¢ÁÚ½Ó±íʱ£¬ÓÉÓÚÊäÈëµÄÊǶ¥µãÐÅÏ¢£¬ËùÒÔÒªÏÈͨ¹ý²éÕÒÇóµÃ¸Ã¶¥µãÔÚͼÖеÄλÖã¬ÔÙ½«ÏàÓ¦½áµã²åÈëµ½¶ÔÓ¦µ¥Á´±íµÄÊײ¿£¬ËùÒÔ£¬¸Ã²Ù×÷µÄʱ¼ä¸´ÔÓ¶ÈΪO(n*e)¡£

7.2.3ÓÐÏòͼµÄÊ®×ÖÁ´±í±íʾ·¨

Ê®×ÖÁ´±íÊÇÓÐÏòͼµÄÁíÒ»ÖÖÁ´Ê½´æ´¢½á¹¹£¬¸Ã·½·¨Êǽ«ÓÐÏòͼµÄÁÚ½Ó±íºÍÄæÁÚ½Ó±í½áºÏÆðÀ´µÃµ½µÄÒ»ÖÖÁ´±í¡£

1£®Ê®×ÖÁ´±íµÄ¶¨Òå

ÀàËÆÁÚ½Ó±í£¬ÔÚÊ®×ÖÁ´±íÖаüº¬Á´±íµÄÍ·½áµãºÍ»¡½áµãÁ½ÖÖÀàÐ͵Ľáµã£¬Í¼7.13¸ø³öÊ®×ÖÁ´½áµã½á¹¹µÄʾͼ¡£

ÆäÖУ¬Í·½áµã°üº¬¶¥µãÐÅÏ¢Óò(data)¡¢Ö¸ÏòÒԸö¥µãΪ»¡Í·µÄµÚÒ»¸ö»¡½áµãµÄÖ¸ÕëÓò(firstin)¡¢Ö¸ÏòÒԸö¥µãΪ»¡Î²µÄµÚÒ»¸ö»¡½áµãµÄÖ¸ÕëÓò(firstout)£¬±íµÄËùÓÐÍ·½áµãÒÔ˳Ðò´æ´¢¡£»¡½áµã°üº¬±íʾ»¡Î²¶¥µãϱêµÄβÓò(tailvex)¡¢±íʾ»¡Í·¶¥µãϱêµÄÍ·Óò(headvex)¡¢Ö¸Ïò»¡Í·ÏàͬµÄÏÂÒ»Ìõ»¡µÄÖ¸ÕëÓò(hlink)¡¢Ö¸Ïò»¡Î²ÏàͬµÄÏÂÒ»Ìõ»¡µÄÖ¸ÕëÓò(tlink)¡¢»¡µÄÐÅÏ¢£¨ÈçȨ

-.180.-

µÚ7Õ ͼ½á¹¹

Öµ£©Óò(info)¡£

ÀýÈ磬ͼ7.14¸ø³öÓÐÏòͼµÄÒ»ÖÖÊ®×ÖÁ´±í±íʾ¡£

Èç¹û½«ÓÐÏòͼµÄÁÚ½Ó¾ØÕó¿´³ÉÊÇÏ¡Êè¾ØÕóµÄ»°£¬ÔòÊ®×ÖÁ´±íÒ²¿ÉÒÔ¿´³ÉÊÇÁÚ½Ó¾ØÕóµÄÊ®×ÖÁ´±í´æ´¢½á¹¹¡£ÔÚÓÐÏòͼµÄÊ®×ÖÁ´±í±íʾÖУ¬Á´±íµÄÍ·½áµãÖ®¼äÊÇ˳Ðò´æ´¢½á¹¹£¬»¡½áµãËùÔÚµÄÁ´±íÊÇ·ÇÑ­»·Á´±í£¬½áµãÖ®¼äµÄÏà¶ÔλÖÃ×ÔÈ»Ðγɣ¬²»Ò»¶¨°´¶¥µãÐòÁкÅÓÐÐò¡£Óɴ˿ɼû£¬ÓÐÏòͼµÄÊ®×ÖÁ´±í±íʾ·½Ê½ÊDz»Î¨Ò»µÄ¡£

2£®Ê®×ÖÁ´±íµÄ´æ´¢±íʾÓëʵÏÖ (1)Ê®×ÖÁ´±í´æ´¢½á¹¹µÄÀàÐͶ¨Òå

ÏÂÃæ·Ö±ð¸ø³öÊ®×ÖÁ´»¡½áµã(ArcBox)¡¢¶¥µã½áµã(OLVexNode)¡¢Ê®×ÖÁ´±í(OLGraph)µÄÀàÐͶ¨Òå¡£

struct ArcBox{ //»¡½áµãµÄ½á¹¹¶¨Òå int tailvex,headvex; //¶¨Ò廡βºÍ»¡Í·¶¥µãµÄλÖà ArcBox *hlink,*tlink; //»¡Í·Ïàͬ¡¢»¡Î²ÏàͬµÄ»¡µÄÁ´Óò int weight; //¶¨ÒåÓÐÏòÍøÖл¡µÄȨֵ };

struct OLVexNode{ //¶¥µã½áµã½á¹¹¶¨Òå VType data; //¶¥µãÐÅÏ¢ ArcBox *firstin,*firstout; //·Ö±ðÖ¸Ïò¶¥µãµÄµÚÒ»ÌõÈ뻡ºÍ³ö»¡ };

struct OLGraph{ //¶¨ÒåÊ®×ÖÁ´±íÀàÐÍ OLVexNode *xlist; //Á´±íÍ·½áµãÊý×éÖ¸Õë int vexnum,arcnum; //ÓÐÏòͼµÄ¶¥µãÊýºÍ»¡Êý GKind kind; }; (2)Ê®×ÖÁ´±íµÄ²éÕÒ²Ù×÷

º¯Êýint LocateVex_OLG(OLGraph G,VType u) ·µ»Ø¶¥µãuÔÚͼGÖеÄλÖã¬Èç¹û²éÕÒʧ°ÜÔò·µ»Ø0Öµ¡£

int LocateVex_OLG(OLGraph G,VType u) { int i; for(i=0;i

-.181.-

µÚ7Õ ͼ½á¹¹

}

else return(0);

(3)½¨Á¢Ê®×ÖÁ´±íµÄË㷨ʵÏÖ

º¯Êývoid CreateGraph_OLG(OLGraph& G,GKind kind)¸ù¾ÝͼµÄÀàÐÍkind½¨Á¢Ò»¸öÓÐÏòͼ»òÓÐÏòÍøµÄÊ®×ÖÁ´±íG¡£

void CreateGraph_OLG(OLGraph& G,GKind kind) { int i,j,k; VType u,v; ArcBox* pr; G.kind=kind; cout<<\ÊäÈë¶¥µãÊýºÍ±ß(»¡)Êývexnum arcnum:\ cin>>G.vexnum>>G.arcnum; G.xlist=new OLVexNode[G.vexnum]; //Ϊ¶¥µãÊý×é·ÖÅäÄÚ´æ¿Õ¼ä cout<<\°´Ä³ÖÖ˳ÐòÊäÈë\.vexnum<<\¸ö¶¥µãµÄÖµ:\\n\ for(i=0;i>G.xlist[i].data; //ÊäÈëËùÓж¥µãµÄÐÅÏ¢µ½dataÖÐ G.xlist[i].firstin=G.xlist[i].firstout=NULL; //É趨³õʼµÄµ¥Á´±íΪ¿Õ } if(G.kind==DG)cout<<\ÊäÈëͼÖÐ\Ìõ»¡µÄÐÅÏ¢u v:\\n\ else cout<<\ÊäÈëͼÖÐ\.arcnum<<\Ìõ»¡ºÍȨµÄÐÅÏ¢u v w:\\n\ for(k=0;k>u>>v; } while(!((i=LocateVex_OLG(G,u))&&(j=LocateVex_OLG(G,v)))); pr=new ArcBox; //¶¯Ì¬·ÖÅ仡´æ´¢¿Õ¼ä pr->tailvex=--i; //i´ÓλÖÃֵת»»ÎªÏ±êÖµ pr->headvex=--j; //j´ÓλÖÃֵת»»ÎªÏ±êÖµ if(G.kind==DN)cin>>pr->weight; pr->hlink=G.xlist[j].firstin; //½«ÊäÈëµÄ»¡²åÈëµ½ÏàÓ¦Á´±íµÄÊײ¿ G.xlist[j].firstin=pr; pr->tlink=G.xlist[i].firstout; G.xlist[i].firstout=pr; }//end for } (4)ÏÔʾʮ×ÖÁ´±íÐÅÏ¢µÄ²Ù×÷

º¯Êývoid DisplyOLG(OLGraph G)·Ö±ð°´ÁÚ½Ó±íºÍÄæÁÚ½Ó±í·½Ê½ÏÔʾµ±Ç°Ê®×ÖÁ´±íGµÄÐÅÏ¢¡£

void DisplyOLG(OLGraph G) { int i; ArcBox* p;

-.182.-