基于邻接表的长度为k的简单路径的求解
一个连通图采用邻接表作为存储结构。设计一个算法,判断无向图中任意给定的两点是否存在一条长度为k的简单路径。
输入
多组数据,每组m+3数据行。第一行有两个数字n,m和k,代表有n个顶点,m条边和长度k。第二行有n个字符,代表n个顶点的编号。第三行到第m+2行每行有两个字符h和p,代表边依附的两个顶点。每条边的长度为1。第m+3行有两个字符d和f,代表需要判断的两个字符。
输出
每组数据输出一行。若存在路径输出“YES”,反之输出“NO”。
输入样例 1
3 2 2
abc
ab
bc
ac
4 2 5
bcsw
bs
sw
bw
0 0 0
输出样例 1
YES
NO
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
#define MaxSize 100
using namespace std;
typedef struct ArcNode
{
int adjvex; //该边所指向的结点的位置(也就是编号)
struct ArcNode *nextarc; //指向下一条边的指针
int info; //
}ArcNode; typedef struct
{
char data; //顶点信息
ArcNode *firstarc; //指向第一条边的指针
}VNode;
typedef struct
{
VNode adjlist[MaxSize];
int n, e; //顶点数、边数
}AGraph; //图的邻接表类型
int visit[MaxSize];
int Locate(AGraph *AG, char c)
{
for (int i = ; i < AG->n; i++)
{
if (AG->adjlist[i].data == c)
return i;
}
}
int nodenum = ;
bool DFS(AGraph *G, int v,int w,int k)
{
ArcNode *p;
visit[v] = ++nodenum;
if (v == w && k == )//置标志位1代表已访问
return true;
else
if (k > )
{
p = G->adjlist[v].firstarc;
while (p)
{
if (visit[p->adjvex] == &&DFS(G,p->adjvex,w,k-))
{
return true;
}
visit[p->adjvex] = ;
nodenum--;
p = p->nextarc;
} }
return false;
}
//创建无向图的邻接表
void createAGraph2(AGraph *&AG, int t, int p)
{
int i, j, k;
ArcNode *q;
AG->n = t;
AG->e = p;
string b;
cin >> b;
for (i = ; i < AG->n; i++)
{
AG->adjlist[i].data = b[i];
AG->adjlist[i].firstarc = NULL;
}
string cc;
for (k = ; k < AG->e; ++k)
{
cin >> cc;
//头插法
i = Locate(AG, cc[]);
j = Locate(AG, cc[]);
q = new ArcNode;
q->adjvex = j;
q->nextarc = AG->adjlist[i].firstarc;
AG->adjlist[i].firstarc = q; q = new ArcNode;
q->adjvex = i;
q->nextarc = AG->adjlist[j].firstarc;
AG->adjlist[j].firstarc = q; }
} AGraph *AG;
int main()
{
int n, m,k;
while (cin >> n >> m >>k&& k!=||n != || m != )
{
AG = new AGraph;
createAGraph2(AG, n, m);
string a;
cin >> a;//查询的两个顶点 if (DFS(AG, Locate(AG,a[]),Locate(AG, a[]),k))
cout << "YES" << endl;
else
cout << "NO" << endl;
}
return ;
}
基于邻接表的长度为k的简单路径的求解的更多相关文章
- SDUT 2142 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
数据结构实验之图论二:基于邻接表的广度优先搜索遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Descript ...
- SDUT2142数据结构实验之图论二:基于邻接表的广度优先搜索遍历
http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2142&cid=1186 题目描述 给定一个无向连通图,顶点编号从0到n-1,用广度优先搜 ...
- 图的基本操作(基于邻接表):图的构造,深搜(DFS),广搜(BFS)
#include <iostream> #include <string> #include <queue> using namespace std; //表结点 ...
- 数据结构 《2》----基于邻接表表示的图的实现 DFS(递归和非递归), BFS
图通常有两种表示方法: 邻接矩阵 和 邻接表 对于稀疏的图,邻接表表示能够极大地节省空间. 以下是图的数据结构的主要部分: struct Vertex{ ElementType element; // ...
- 基于邻接表的广度优先搜索遍历(bfs)
题目:http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2142&cid=1186 #include<stdio.h> #incl ...
- 图的存储结构(邻接矩阵与邻接表)及其C++实现
一.图的定义 图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为: G=(V,E) 其中:G表示一个图,V是图G中顶点的集合,E是图G中顶点之间边的集合. 注: 在线性表中,元素个数可以为零, ...
- 数据结构之 图论---bfs(邻接表)
数据结构实验之图论二:基于邻接表的广度优先搜索遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 给定一个无向连通图,顶点编号从0到n-1,用广度优先搜索( ...
- POJ - 3255 SPFA+邻接表求次短路径
题意:给出m条边 , n个顶点,u [ i ]到v [ i ] 的距离w [ i ],求除了最短路的那条最短的边的长度. 思路:之前有做过相似的题,使用迪杰斯特拉算法求单源最短路径,并且记录路径,枚举 ...
- Managing Hierarchical Data in MySQL(邻接表模型)[转载]
原文在:http://dev.mysql.com/tech-resources/articles/hierarchical-data.html 来源: http://www.cnblogs.com/p ...
随机推荐
- BZOJ:3231: [Sdoi2008]递归数列
题解: 矩阵乘法,在矩阵中构造当前前缀和: 注意:for(int/long long ;;); #include<iostream> #include<cstdio> #inc ...
- java内存机制 垃圾回收
gc机制一 1.JVM的gc概述 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm都有gc,而且大多数gc ...
- swift中利用系统线程实现异步加载数据同步更新UI
swift中的使用案例样式 // Mark: -数据源更新 typealias AddDataBlock = () ->Void var updataBlock:AddDataBlock? fu ...
- [NOIP2009普及]分数线划定 T2 排序
Description 世博会志愿者的选拔工作正在 A 市如火如荼的进行.为了选拔最合适的人才,A 市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试.面试分数线根据计划录取人数的 ...
- jar包-循环遍历-开机启动服务-微服务-多项目拷贝-pid杀死进程-mysql备份脚本-防火墙检测脚本
vi /root/serverkaiji.sh #!/bin/bash ls /tlvnksc/ | egrep -v "^c|^f" > /root/service.lis ...
- 吴裕雄--天生自然Django框架开发笔记:Django 创建第一个项目
Django 管理工具 安装 Django 之后,您现在应该已经有了可用的管理工具 django-admin.可以使用 django-admin 来创建一个项目: 可以来看下django-admin ...
- 一天一个设计模式——Prototype 原型模式
一.模式说明 看了比较多的资料,对原型模式写的比较复杂,个人的理解就是模型复制,根据现有的类来直接创建新的类,而不是调用类的构造函数. 那为什么不直接调用new方法来创建类的实例呢,主要一个原因是如果 ...
- .NET技术-4.0. NETCORE跨域
.NET技术-4.0. NETCORE跨域 1.安装程序CORS程序包,一般默认都带了此程序包的 Install-Package Microsoft.AspNetCore.Mvc.Cors 2.配置C ...
- 无车承运前世今生,5G货运管家期待您的加入
历时三年的无车承运人试点工作结束,从2020年1月1日起,将执行新的暂行<办法>,在这样一个承前启后的阶段,无车承运人的命运如何?网络货运经营者又是何物? 在新赛道下,将迎来什么样的机遇和 ...
- Spark核心算子
Spark RDD: Transformation Meaning map(func) 返回一个新的分布式数据集,该数据集是通过将源的每个元素传递给函数func处理形成的. filter(func) ...