一个连通图采用邻接表作为储存结构,设计一个算法,实现从顶点v出发的深度优先遍历的非递归过程。

一个连通图采用邻接表作为储存结构,设计一个算法,实现从顶点v出发的深度优先遍历的非递归过程。#include <iostream>
#include <vector>
#include <stack>
#include <cstring>
using namespace std;
const int maxn = 1000000;
vector<int> G[maxn];
int e[maxn];
bool visit[maxn];
void dfs(int u)
{
visit[u] = true;
cout << u << endl;
for(int i = 0; i < (int)G[u].size(); ++i) {
if(!visit[G[u][i]]) dfs(G[u][i]);
}
}
int n, s; // 结点数, 起点编号
int main()
{
cin >> n;
for(int i = 1; i <= n; ++i) {
int sz;
cin >> sz;
for(int j = 0; j < sz; ++j) {
int v;
cin >> v;
G[i].push_back(v);
}
}
cin >> s;
dfs(s);
cout << endl;
memset(visit, 0, sizeof(visit));
stack<int> stk;
stk.push(s);
while(!stk.empty()) {
int u = stk.top(); stk.pop();
if(!visit[u])
{
cout << u << endl;
visit[u] = true;
}
for(; e[u] < (int)G[u].size(); ++e[u]) {
int v = G[u][e[u]];
if(visit[v]) continue;
stk.push(u); stk.push(v);
break;
}
}
return 0;
}

我想要知道这个题目这个程序采用的
1. 算法思路是什么
2. 数据结构设计怎么弄
3. 复杂度分析,拜托各位大神了

答案是o(n+e) 但是邻接表里面不是每个边被储存两次吗,为什么不是n+2e呢?
在大O表示法中O(n+2e)通常应表示为O(n+e)
温馨提示:内容为网友见解,仅供参考
无其他回答

一个连通图采用邻接表作为储存结构,设计一个算法,实现从顶点v出发的...
在大O表示法中O(n+2e)通常应表示为O(n+e)

假设G采用邻接表存储、试设计一个算法、求不带权无向连通图G中距离定点...
图G由两个集合V和E组成,记为G=(V,E),其中V是图中顶点的有限集合,V={v1,v2,…,vn},E是连接V中两个顶点的边的有限集合,边是顶点的有序对或无序对,记作<vi,vj>或(vi, vj)。如果代表边的顶点对是无序的,则称G为无向图,无向图中代表边的无序顶点对通常用圆括号括起来。如果表示...

...多重表为存储结构,实现连通无向图的深度优先遍历和广度优先遍历...
2015-10-16 具有n个顶点、e条边的图采用邻接表存储结构,进行深度优先遍历... 19 2015-06-07 一个连通图采用邻接表作为储存结构,设计一个算法~实现从顶点v... 14 2012-01-08 用邻接矩阵存储无向图,并用深度优先和广度优先遍历搜索输出序列... 1 2015-09-06 用邻接表表示图进行深度优先遍历时,通常...

数据结构(C语言版) 图的遍历和拓扑排序
任务:给定一个有向图,实现图的深度优先,广度优先遍历算法,拓扑有序序列,并输出相关结果。功能要求:输入图的基本信息,并建立图存储结构(有相应提示),输出遍历序列,然后进行拓... 任务:给定一个有向图,实现图的深度优先, 广度优先遍历算法,拓扑有序序列,并输出相关结果。功能要求:输入图的基本信息,并建立图存储结...

编写算法:已知一个无向连通图G,采用邻接表存储。求从Vi出发到Vj(i≠j...
无向图最短路径嘛,而且你这个还只是节点数最少,都不用算路径长度,更简单。简单的方法:两节点间遍历,深度优先遍历,广度度优先遍历随便。遍历时记录经过的节点数目,数目最少的就是结果了

深度优先遍历的过程
上述过程直至从x出发的所有边都已检测过为止。此时,若x不是源点,则回溯到在x之前被访问过的顶点;否则图中所有和源点有路径相通的顶点(即从源点可达的所有顶点)都已被访问过,若图G是连通图,则遍历过程结束,否则继续选择一个尚未被访问的顶点作为新的顶点,继续遍历。template <int max_size>...

数据结构笔试题
二叉树的结构如下图所示 其中序遍历的序列为( ? )A a b d g c e f hB d g b a e c h fC g d b e h f c aD a b c d e f g h深度为 的二叉树至多有(? C? )个结点 ( ^M )A ? B ? C ? D 对于一个具有n个顶点的无向图 若采用邻接表表示 则存放表头结点的数组的大小为...

...采用邻接表结构存储,要求编写算法实现广度优先搜索策略遍历图中所...
intadjvex; \/\/该边所指向的顶点的位置 struct ArcNode *nextarc; \/\/指向下一条边 }ArcNode;typedef structVNode \/\/表节点 { intdata; \/\/顶点信息 ArcNode*firstarc; \/\/指向第一条依附该节点的边的指针 }VNode,AdjList[MAX];typedef struct { AdjListvertices; \/\/表节点 intvexnum;...

哈密顿回路的算法
从图中的任意一点出发,路途中经过图中每一个结点当且仅当一次,则成为哈密顿回路。要满足两个条件:⒈封闭的环⒉是一个连通图,且图中任意两点可达经过图(有向图或无向图)中所有顶点一次且仅一次的通路称为哈密顿通路。经过图中所有顶点一次且仅一次的回路称为哈密顿回路。具有哈密顿回路的图称为...

《算法与数据结构基础》学习笔记06_01——非线性结构_图
极小连通子图是指删除任意一条边后不再连通的子图。生成树是无向图中包含所有顶点的极小连通子图。生成森林是非连通图的各个连通分量的生成树的集合。图的存储结构有数组表示法(邻接矩阵)和链式表示法(邻接表)。邻接矩阵用于无向图和有向图,分别表示无向边和有向边。网(权图)的邻接矩阵中边...

相似回答
大家正在搜