深度优先搜索/广度优先搜索顶点之间的路径(邻接表)
来源:互联网 发布:手机后花园软件 编辑:程序博客网 时间:2024/06/05 19:54
描述
给出一个有向图(节点个数<=100),试利用邻接表方式存储,然后利用图的深度优先搜索,判断是否存在由顶点vi到顶点vj的路径(i != j)。注意:有多条路径需要判断,每个结果占一行,最后要输出一个回车符。
输入
从1开始表示第一个节点。
第一行输入: 有向图的边数n,测例的个数m。
之后n行输入:用来描述边,如2 4表示存在一条由顶点2到4的边。
之后是m行输入:用来给出要测的路径,如2 5表示是否存在由顶点2到顶点5的路径。
第一行输入: 有向图的边数n,测例的个数m。
之后n行输入:用来描述边,如2 4表示存在一条由顶点2到4的边。
之后是m行输入:用来给出要测的路径,如2 5表示是否存在由顶点2到顶点5的路径。
输出
对于每个测试例子输出一个结果并占一行。
输出 Y表示源点和终点之间没有路径
输出 N表示源点和终点之间存在路径
输出 Y表示源点和终点之间没有路径
输出 N表示源点和终点之间存在路径
输入样例
3 2
1 2
2 3
4 3
1 4
1 3
1 2
2 3
4 3
1 4
1 3
输出样例
N
Y
#include <iostream>#include <algorithm>#include <cstring>#define maxnum 120using namespace std;typedef char VertexType;//边typedef struct ArcNode{ int adjvex; struct ArcNode *nextarc;}ArcNode;//顶点typedef struct VNode{ VertexType data; ArcNode *firstarc;}VNode, AdjList[maxnum];typedef struct{ AdjList vertices;//数组 int vexnum, arcnum;}ALGraph;int visited[maxnum] = {0};void CreateALGraph(ALGraph &g, int arc, int vex){ g.arcnum = arc; g.vexnum = vex; int v1, v2, i;for(i = 1; i <= vex; i++){g.vertices[i].firstarc = NULL;} for(i = 1; i <= arc; i++) { cin >> v1 >> v2; ArcNode *q = (ArcNode*)malloc(sizeof(ArcNode)); q->adjvex = v2;q->nextarc = g.vertices[v1].firstarc;g.vertices[v1].firstarc = q; }}int DFS(ALGraph g, int i, int j){ visited[i] = 1;ArcNode *p = g.vertices[i].firstarc;while(p){if(p->adjvex == j)return 1; //cout <<(visited[p->adjvex])<< endl;if(!(visited[p->adjvex]) && DFS(g, p->adjvex, j))return 1;p = p->nextarc;}return 0;}int main(){ int m, n; cin >> m >> n; ALGraph g; CreateALGraph(g, m, m+1);// for(int i = 1; i <= m+1; i++)// {// ArcNode *p = g.vertices[i].firstarc;// cout << "i = " << i << ": ";// while(p)// {// cout << p->adjvex;// p = p->nextarc;// }//cout << endl;// } while(n--) { int v1, v2; cin >> v1 >> v2; memset(visited, '\0', sizeof(visited));//错误找了好久 int flag = DFS(g, v1, v2); if(flag) cout << "Y" << endl; else cout << "N" << endl; } return 0;}
0 0
- 深度优先搜索/广度优先搜索顶点之间的路径(邻接表)
- 图的深度、广度优先搜索(邻接表)
- 图的深度优先搜索/广度优先搜索(邻接表实现)
- 图深度优先搜索广度优先搜索,邻接表
- 邻接表 邻接矩阵 广度优先搜索 深度优先搜索
- 图的广度优先搜索 深度优先搜索 最短路径 拓扑排序(邻接链表表示)
- 图基本算法 图搜索基于邻接表的(广度优先、深度优先)
- 图的邻接表表示、广度优先、深度优先搜索
- 22.基于 邻接表 表示的 深度优先搜索dfs 和 广度优先搜索bfs
- 图的广度优先搜索和深度优先搜索(邻接链表表示)
- 图的广度优先搜索(邻接表)
- 图的广度优先搜索(邻接表)
- 基于邻接表的深度优先搜索
- 图的深度优先搜索(邻接表)
- 邻接表的深度优先搜索(DFS)
- 邻接表图的深度优先搜索
- 图的深度(广度)优先搜索
- 邻接表--创建图、删除图、深度优先搜索、广度优先搜索---代码
- 大数相乘,结果在2000位以内
- Java 输出流中的flush方法
- ORACLE多表关联UPDATE 语句
- 《樱桃树下的对白------我孤身在外》
- 使用ssh-keygen和ssh-copy-id三步实现SSH无密码登录
- 深度优先搜索/广度优先搜索顶点之间的路径(邻接表)
- tomcat多例
- Centos7.1防火墙开放端口
- Android数据库存储
- hbase shell 入门
- 关于OGR读取多边形-Polygon(GDAL 2.0版本之前)
- 贴近自身的装修
- Trick(十五)—— 树结构如何判断一个节点是内部节点(internal node)还是叶子节点(leaf node)
- 【数据结构排序算法系列】数据结构八大排序算法