严蔚敏++数据结构习题集答案(6)
void Inser-Mgraph (mGraph *G,int k) {int i,j; G->n++;
for(i=G->n;i>k;i--)G->vexs[i]=G->vexs[i-1]; G->cexs[k]=getchar(); for(i=G->n;i>k;i--)
{ for(j=G->n;j>k;j--)
G->e[i][j]=G->e[i-1][j-1]; G->e[i][j]=0;
for(j=k-1;j>=0;j--)
G->e[i][j]=G->e[i-1][j]; }
for(j=G->n;j>=0;j--)G->e[i][j]=0; for(i=k-1;i>=0;j--) { for(j=g->n;j>k;j--)
G->e[i][j]=G->e[i][j-1]; G->e[i][j]=0 } }
⑵插入一条边 ① 邻接表
InsertLAGraph (ALGraph *G,int m,INT n) { EdgeNode *E;
EdgeNode *sm=new EdgeNode; EdgeNode *sn=new Edgenode; Sm->adjvex=n;sm->next=Null; Sn->adjvex=m;sn->next=Null;
for(E=G->adjlist[m].firstedge;E!=NULL;E=E->next) { }
E=sm;
for(E=G->adjlist[n].firstedge;E!=NULL;E=E->next) { } E=sn;
}
② 邻接矩阵
void InsertLMGraph(mGraph *G,int m,int n) { G->e[m][n]=1;
}
(3)删除某结点 ① 邻接表
void DelVALGraph(ALGraph *g,int k) { int I; G->n--;
EdgeNode *e *s;
for(E=G->adjlist[k].firstdge;E!=NULL;E=E->next)
{ for (s=G->adjlist[E->adjvxe].firstedge;E!=NULL;E->E->next) if(s->adjvex==k) {s=s->next;break;} }
for(i=k;i
{ G->adjlist[i].vertex=G->adjlist[i+1].vextex;
G->adjlist[i].first[i].firstedge=G->adjlist[i+1].firstedge;
}
}
② 邻接矩阵
void delvMGraph(mGraph *G,int k) {int i,j; G->n--;
for(i=k;i<=g->n;i++) G->vexs[i]=G->vexs[i+1]; for(i=0;i for(j=k;j<=n;j++) G->e[i][j]=G->e[i][j]; for(i=k;i<=G->n;i++) {for(j=0;j (4)删除某条边 ① 邻接表 void dellALGraph(ALGraph *G,int m,int n) {EdgeNode *s; for(S=G->adjlist[m].firstedge; s->adjvex!=k;s=s->next) s=s->next; for(s=G->adjlist[n].firstedge; s->adjvex!=k;s=s->next) s=s->next; } ②邻接矩阵 void InsertLMGraph(mGraph *G,int m,int n) {G->e[m][n]=0; G->e[n][m]=0; } 7.17 下面的伪代码是一个广度优先搜索算法,试以图7.29中的V4为源点执行该算法,请回答下述问题: (1) 对图中顶点Vn+1,它需要入队多少次?它被重复访问多少次? (2) 若要避免重复访问同一个顶点的错误,应如何修改此算法? Void BFS(ALGraph *G,int k) {//以下省略局部变量的说明,visited各分量初值为假 InitQueue(&Q); //置空队列 EnQueue(&Q,k); //k入队 While(!QueueEmpty(&Q)) {I=DeQueue(&Q); //vi出队 visited[I]=true //置访问标记// printf(“%c”,G->adjilist[i],vertes); //访问j for(p=G->adjilist[i],firstedge;p;p=p->adjves=j)//依次搜索vi的邻接点vj (不妨设p->adjves=j) if(!Visited[p->adjves]) //若vj未被访问 EnQueue(&Q,p->adjves); //vj入队 } //endwhile } //BFS 解: 对图中顶点vn+1,它需入队n次?它被重复访问n-1次。 若要避免重复访问同一个顶点的错误,应修改算法如下: Void BFS(ALGraph*G,int K) { /*以下省略局部变量得说明,visited各分量初值为假*/ InitQueue(&Q); /*置空队列*/ EnQueue(&Q,k); /*k队列*/ While(!QueueEmpty(&Q)) {I=DeQueue(&Q); /*vi出队*/ visited[I]=true /*置访问标记*/ printf(“%c”,G->adjilist[i],vertes);/*访问vi*/ for(p=G->adjlist[i],firstedge;p;p->adjves=j) /*依次搜索vi的邻接点vj(不妨设p->adjves=j)*/ if(!Vvisit[p->adjves]) /*若vj未访问过*/ { EnQueue(&Q,p->adjves); /*/vj入队*/ Visited[p->adjvex]=TRUE; } } /*endwhile*/ } /*BFS*/ 7.18 试以邻接表和邻接矩阵为存储结构,分别写出基于DFS和BFS遍历的算法来判别顶点vi和vj(I<>j)之间是否有路径。 解: /*基于邻接表方式*/ /*所有数据类型*/ #define maxvn 10 typedef struct node { int vertex; int vertex; setuct node *list; } vertexNode vertexNode *head[maxvn]; bool JUDGE(vertexNode *adjl[maxvn],int n,int j); /*深度优先搜索判别n个顶点的有向图中顶点I到顶点j是否存在路径*/ { int stack[maxvn]; bool visit[maxvm]; int top,k; vertexNODE *p; bool yes; for(k=1;k<=n;k++) visit[k]=false; top=1; stack[top]=i; visit[i]=True; yes=false; do{ p=adjl[stack[top]]; while(!p=NULL&&visit[p->vertex]p=p->link); if(p==NULL) top=top-1; /*p之后无邻接结点,退栈*/ else {i=p->vertex; /*p指向的顶点未访问*/ if(i==j) yes=true; else { visit[i]=true; top=top+1; stack[top]=i; } }while(top1=0&&!yes); return(yes); } 7.19 试分别写出求DFS和BFS生成树(或生成森林)的算法,要求打印出所有的树边。 解: ①/*以Vi为树根,对邻接矩阵表示的图G进行DFS搜索*/ void DFSM(Mgraph *G,int ) { int j; printf(“visit vertex:%c”,G->vexs[i]); visitcd[i]=True; for(j=0;j<=G->n;j++) if(G->edges[i][j]==1&&!visit[j]) { print(“edye:%d?%d\\n”,i,j); DESM(G,j); } } ②/*以VI为树根,对邻接矩阵表示的图G进行DFS搜索*/ void DFSM(Mgraph *G,int k) { int i,j; SETNULL(Q); /*置空队Q*/ Printf(‘%/“,G.vexs[k]); Visited[k]=True; /*标志Vk+1已经访问过*/ ENQUEUE(Q,k); /* 已经访问过的顶点如队列*/
…… 此处隐藏:3259字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [互联网资料]2022年厦门大学机电工程系824机械设计
- [互联网资料]东南大学2022年硕士研究生拟录取名单公
- [互联网资料]能源调研报告(精选多篇)
- [互联网资料]初三英语下学期 中考英语 语法填空训练
- [互联网资料]2022内蒙古选调生行测常识备考:新事物
- [互联网资料]自驾必备!在新西兰租什么样的车自驾游
- [互联网资料]佛教素食菜谱44页未完
- [互联网资料]盈利能力分析外文翻译
- [互联网资料]2022年南昌航空大学音乐学院736马克思
- [互联网资料]优选外贸跟单实习报告总结(精品版)
- [互联网资料]银行新员工培训总结
- [互联网资料]2_year_visa_new_guidance_190316
- [互联网资料]天津市五校宝坻一中静海一中杨村一中芦
- [互联网资料]2007--2008学年第一学期高三数学宁波市
- [互联网资料]Chromatic framework for vision in ba
- [互联网资料]幼儿园大班上学期美术教案《心愿树》含
- [互联网资料]2022年华中农业大学信息学院820微型计
- [互联网资料]硬盘坏道的表现 __硬盘使用久了
- [互联网资料]江苏省2016年会计从业资格考试《会计基
- [互联网资料]公共场所卫生监督试卷全解
- 高级英语第一册所有修辞方法及例子总结
- 综合交通枢纽规划与城市发展
- 沃尔玛的企业文化案例分析
- 美国Thanksgiving Day 感恩节 介绍
- PEP六年级英语上册Unit6How do you fee
- 最齐全的中国大型商场购物中心名单
- 数据结构实验报告八—哈夫曼编译码
- 杭州市余杭区人民政府(通知)
- 七年级语文成语运用专项训练
- 微观经济学第三章 消费者行为 课后习题
- 对_钱学森之问_的思考
- Excel_三级联动_下拉菜单
- 办公用品需求计划申请表
- 对外汉语教材必须要知道的发展史
- 挑战杯大学生学术科技作品竞赛作品申报
- 举办民办教育培训机构应具备下列条件
- 太阳能路灯项目设计方案
- 2013年八年级上最新人教版新教材Unit3I
- 【历史】 6-4 《近代科学之父牛顿》 课
- 高中生物《第四章 第二节 探讨加酶洗衣




