当前位置: 首页 > wzjs >正文

快速做网站公司哪家专业营销网站建设服务

快速做网站公司哪家专业,营销网站建设服务,网络营销ppt案例,长春网站建设报价给定一个有向图,求其拓扑序列,若有环路,输出error! 注意:本题用栈结构实现入度为0结点存储,否则拓扑序列输出顺序会和测试数据不一致。本题栈结构建议用数组实现,不用栈类。 ###你要实现的 函数接口定义&…

给定一个有向图,求其拓扑序列,若有环路,输出error!

注意:本题用栈结构实现入度为0结点存储,否则拓扑序列输出顺序会和测试数据不一致。本题栈结构建议用数组实现,不用栈类。

###你要实现的 函数接口定义:

void TopSort(AdjGraph *G);//邻接表拓扑排序。注:需要在该函数开始计算并初始化每个节点的入度,然后再进行拓扑排序

裁判测试程序样例:

#define  MAXV  20
#include <iostream>
using namespace std;
typedef struct ANode
{  int adjvex;            //该边的终点编号struct ANode *nextarc;    //指向下一条边的指针int info;                    //该边的相关信息,如权重
} ArcNode;                      //边表节点类型
typedef int Vertex;
typedef struct Vnode
{  Vertex data;            //顶点信息int count;                   //入度ArcNode *firstarc;        //指向第一条边
} VNode;            //邻接表头节点类型
typedef VNode AdjList[MAXV];
typedef struct 
{  AdjList adjlist;        //邻接表int n,e;                //图中顶点数n和边数e
} AdjGraph;    
void CreateAdj(AdjGraph *&G,int n,int e); //创建图邻接表
void TopSort(AdjGraph *G);                //邻接表拓扑排序 
void DispAdj(AdjGraph *G);                //输出邻接表,供测试 
int main()
{int n,e,i,v;AdjGraph *G;cin>>n>>e;CreateAdj(G,n,e);//DispAdj(G);cout<<"拓扑序列:";TopSort(G);
}
void DispAdj(AdjGraph *G)
//输出邻接表G,可以供测试用
{int i;ArcNode *p;for (i=0;i<G->n;i++){p=G->adjlist[i].firstarc;if (p!=NULL) printf("%3d: ",i);while (p!=NULL){printf("%3d",p->adjvex);p=p->nextarc;}printf("\n");}
}
void CreateAdj(AdjGraph *&G,int n,int e) //创建图邻接表
{   int i,j,a,b;ArcNode *p;G=new AdjGraph;for (i=0;i<n;i++)   G->adjlist[i].firstarc=NULL;for (i=1;i<=e;i++)                //根据输入边建图      {          cin>>a>>b;                    //有向图 p=new ArcNode;            //创建一个结点pp->adjvex=b;                //存放邻接点p->nextarc=G->adjlist[a].firstarc;  //采用头插法插入结点pG->adjlist[a].firstarc=p;}G->n=n; G->e=n;
}
/* 请在这里填写答案 */

输入样例1:

拓扑--无环图.png

5 7
1 0
4 3
2 1
2 0
3 2
4 1
4 2

输出样例1:

顶点编号空格隔开,尾部不带空格。

拓扑序列:4 3 2 1 0

输入样例2:

拓扑--有环图.png

5 8
0 3
1 0
4 3
2 1
2 0
3 2
4 1
4 2

输出样例:

error!

先说说拓扑排序的实现思想:

因为 a ,b两个顶点是没有前驱的顶点的,所以说先用a(或b也一样)入栈,然后擦除 a 指出去的箭头(相当于独立出来了),然后再看剩下的没有前驱顶点的顶点,重复这个操作,直到图空。

详细流程就是:

 

因为这道题有说到需要用栈,那用栈的算法思想就在这里了:

CountInDegree(G,indegree);  // 对各顶点求入度。
InitStack(S);
for ( i=0; i<G.vexnum; ++i)if (!indegree[i])  Push(S, i); // 入度为零的顶点入栈
count=0;                        // 对输出顶点计数
while (!EmptyStack(S)) {Pop(S, v); ++count; printf(v);for (w=FirstAdj(v); w;  w=NextAdj(G,v,w)){--indegree(w);            // 弧头顶点的入度减一if (!indegree[w])  Push(S, w);// 新产生的入度为零的顶点入栈}
}
if ( count<G.vexnum )printf("图中有回路");

整理一下,那这道题的最终代码在这,,

代码如下: 

void TopSort(AdjGraph *G) {// 初始化入度数组for (int i = 0; i < G->n; i++) {G->adjlist[i].count = 0;}// 计算每个节点的入度for (int i = 0; i < G->n; i++) {ArcNode *p = G->adjlist[i].firstarc;while (p != NULL) {G->adjlist[p->adjvex].count++;p = p->nextarc;}}// 使用数组实现栈结构存储入度为0的节点int stack[MAXV];int top = -1;// 将初始入度为0的节点压入栈for (int i = 0; i < G->n; i++) {if (G->adjlist[i].count == 0) {stack[++top] = i;}}// 拓扑排序结果计数int count = 0;// 存储拓扑序列int result[MAXV];// 处理栈中的节点while (top != -1) {int u = stack[top--]; // 弹出栈顶节点result[count++] = u;  // 记录拓扑序列// 遍历u的所有邻接节点ArcNode *p = G->adjlist[u].firstarc;while (p != NULL) {int v = p->adjvex;G->adjlist[v].count--; // 邻接节点入度减1if (G->adjlist[v].count == 0) {stack[++top] = v; // 新的入度为0的节点入栈}p = p->nextarc;}}// 判断是否存在环路if (count < G->n) {cout << "error!";} else {// 输出拓扑序列for (int i = 0; i < count; i++) {if (i > 0) cout << " ";cout << result[i];}}
}


文章转载自:

http://Rx1g4F48.Lctrz.cn
http://5zM0Jt7E.Lctrz.cn
http://PkvKzGTf.Lctrz.cn
http://5fT10eHi.Lctrz.cn
http://lmibdFvy.Lctrz.cn
http://cdIKL0Nu.Lctrz.cn
http://k6MVGnDz.Lctrz.cn
http://rh3ksINu.Lctrz.cn
http://P6pb7uCz.Lctrz.cn
http://CnU1C0yb.Lctrz.cn
http://Gw3EMss6.Lctrz.cn
http://EYOHZhgZ.Lctrz.cn
http://QZjsKoYU.Lctrz.cn
http://MlOQh5kj.Lctrz.cn
http://4gIT7hLZ.Lctrz.cn
http://fhTMf3FU.Lctrz.cn
http://OlDJSYNo.Lctrz.cn
http://vPcc46QA.Lctrz.cn
http://jfxjejZH.Lctrz.cn
http://lu4c71wS.Lctrz.cn
http://HrDNuzNL.Lctrz.cn
http://MPVTkOls.Lctrz.cn
http://E1h4YXfw.Lctrz.cn
http://ouSn5QU3.Lctrz.cn
http://GHMSCdjy.Lctrz.cn
http://WcxGlkHy.Lctrz.cn
http://ZqgkU0sK.Lctrz.cn
http://US2J9NUf.Lctrz.cn
http://YBb6bZ1g.Lctrz.cn
http://YrskXBvM.Lctrz.cn
http://www.dtcms.com/wzjs/751393.html

相关文章:

  • 深圳罗湖做网站的公司哪家好wordpress文章保存图片
  • 网站建设费怎么做账网站 全屏幻灯片
  • 用虚拟机做服务器搭建网站wordpress aws
  • 电子商务网站建设报价wordpress 通用代码 网页
  • 基于django的电子商务网站设计国内代理ip地址
  • wordpress建站好不好个人商城
  • 网站百度提示风险网站使用方法
  • 数码网站名html是建网站导航栏怎么做
  • 物流网站建设可行性报告网站建设费用设计
  • 互联网工具型网站网站备案是什么
  • 许昌做网站联系电话有赞微商城登录
  • 广州骏域网站佛山科技网站建设
  • 查看网站后台登陆地址重庆网站搭建公司
  • 著名设计网站如何将网站搭在阿里云
  • 接技术标做网站做50个网站
  • 兰州搜狗推广佛山网站推广优化公司
  • 什么是网站维护实时新闻
  • 福田企业网站优化排名无锡微信网站建设
  • 做网站的作品思路及步骤wordpress 自定义 空白
  • 微网站方案问卷调查网站赚钱
  • 房山网站建设公司wordpress时光轴插件
  • 高端快速建站怎么做免费的网站链接
  • 泉州网站建设咨询网站建设备案多长时间
  • 网站建设系统总体结构功能图wordpress访客记录
  • 网站图片怎么做alt重庆网站建设公司销售
  • 长春网站建设招代理wordpress首页布局怎么修改
  • tp框架做网站seo服务顾问
  • 网站建设的关键要素wordpress上传sh文件夹
  • 怎样说服客户做网站做网站用到的单词
  • 网站地图开发精美网页欣赏