文檔庫

最新最全的文檔下載
當前位置:文檔庫 > 2012年內蒙古自治區數據結構理論與實踐深入

2012年內蒙古自治區數據結構理論與實踐深入

1、本題應使用深度優先遍歷,從主調函數進入dfs(v)時,開始記數,若退出dfs()前,已訪問完有向圖的全部頂點(設為n個),則有向圖有根,v為根結點。將n個頂點從1到n編號,各調用一次dfs()過程,就可以求出全部的根結點。題中有向圖的鄰接表存儲結構、記頂點個數的變量、以及訪問標記數組等均設計為全局變量。建立有向圖g的鄰接表存儲結構參見上面第2題,這里只給出判斷有向圖是否有根的算法。

int num=0, visited[]=0 //num記訪問頂點個數,訪問數組visited初始化。

const n=用戶定義的頂點數;

AdjList g ; //用鄰接表作存儲結構的有向圖g。

void dfs(v)

{visited [v]=1; num++; //訪問的頂點數+1

if (num==n) {printf(“%d是有向圖的根。\n”,v); num=0;}//if

p=g[v].firstarc;

while (p)

{if (visied[p->adjvex]==0) dfs (p->adjvex);

p=p->next;} //while

visited[v]=0; num--; //恢復頂點v

}//dfs

void JudgeRoot()

//判斷有向圖是否有根,有根則輸出之。

{static int i ;

for (i=1;i<=n;i++ ) //從每個頂點出發,調用dfs()各一次。

{num=0; visited[1..n]=0; dfs(i); }

}// JudgeRoot

算法中打印根時,輸出頂點在鄰接表中的序號(下標),若要輸出頂點信息,可使用g[i].vertex。

2、設有兩個集合A和集合B,要求設計生成集合C=A∩B的算法,其中集合A、B和C用鏈式存儲結構表示。

typedef struct node {int data; struct node *next;}lklist;

void intersection(lklist *ha,lklist *hb,lklist *&hc)

{

lklist *p,*q,*t;

for(p=ha,hc=0;p!=0;p=p->next)

{ for(q=hb;q!=0;q=q->next) if (q->data==p->data) break;

if(q!=0){ t=(lklist *)malloc(sizeof(lklist)); t->data=p->data;t->next=hc; hc=t;} }

}

福彩中奖查询 三分彩下载什么软件 重庆幸运农场app 内蒙古十一选五基本走势图百度彩票 福建麻将怎么打 捕鱼大师官网网址多少 开元棋牌游戏下载地址 广东十一选五走势 江西十一选五一定牛 好运彩3开奖 广东快乐10分钟走势图表 腾讯麻将怎么开好友房 山东20选5开奖号走势图 360竞彩足球比分直播 百度 捕鱼大师2015单机版 福州麻将技巧 云南快乐十分任二遗漏一定牛