描述

一个连通图采用邻接表作为存储结构。设计一个算法,判断无向图中任意给定的两点是否存在一条长度为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的简单路径的求解的更多相关文章

  1. SDUT 2142 数据结构实验之图论二:基于邻接表的广度优先搜索遍历

    数据结构实验之图论二:基于邻接表的广度优先搜索遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Descript ...

  2. SDUT2142数据结构实验之图论二:基于邻接表的广度优先搜索遍历

    http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2142&cid=1186 题目描述 给定一个无向连通图,顶点编号从0到n-1,用广度优先搜 ...

  3. 图的基本操作(基于邻接表):图的构造,深搜(DFS),广搜(BFS)

    #include <iostream> #include <string> #include <queue> using namespace std; //表结点 ...

  4. 数据结构 《2》----基于邻接表表示的图的实现 DFS(递归和非递归), BFS

    图通常有两种表示方法: 邻接矩阵 和 邻接表 对于稀疏的图,邻接表表示能够极大地节省空间. 以下是图的数据结构的主要部分: struct Vertex{ ElementType element; // ...

  5. 基于邻接表的广度优先搜索遍历(bfs)

    题目:http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2142&cid=1186 #include<stdio.h> #incl ...

  6. 图的存储结构(邻接矩阵与邻接表)及其C++实现

    一.图的定义 图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为: G=(V,E) 其中:G表示一个图,V是图G中顶点的集合,E是图G中顶点之间边的集合. 注: 在线性表中,元素个数可以为零, ...

  7. 数据结构之 图论---bfs(邻接表)

    数据结构实验之图论二:基于邻接表的广度优先搜索遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 给定一个无向连通图,顶点编号从0到n-1,用广度优先搜索( ...

  8. POJ - 3255 SPFA+邻接表求次短路径

    题意:给出m条边 , n个顶点,u [ i ]到v [ i ] 的距离w [ i ],求除了最短路的那条最短的边的长度. 思路:之前有做过相似的题,使用迪杰斯特拉算法求单源最短路径,并且记录路径,枚举 ...

  9. Managing Hierarchical Data in MySQL(邻接表模型)[转载]

    原文在:http://dev.mysql.com/tech-resources/articles/hierarchical-data.html 来源: http://www.cnblogs.com/p ...

随机推荐

  1. BZOJ:3231: [Sdoi2008]递归数列

    题解: 矩阵乘法,在矩阵中构造当前前缀和: 注意:for(int/long long ;;); #include<iostream> #include<cstdio> #inc ...

  2. java内存机制 垃圾回收

    gc机制一 1.JVM的gc概述 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm都有gc,而且大多数gc ...

  3. swift中利用系统线程实现异步加载数据同步更新UI

    swift中的使用案例样式 // Mark: -数据源更新 typealias AddDataBlock = () ->Void var updataBlock:AddDataBlock? fu ...

  4. [NOIP2009普及]分数线划定 T2 排序

    Description 世博会志愿者的选拔工作正在 A 市如火如荼的进行.为了选拔最合适的人才,A 市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试.面试分数线根据计划录取人数的 ...

  5. jar包-循环遍历-开机启动服务-微服务-多项目拷贝-pid杀死进程-mysql备份脚本-防火墙检测脚本

    vi /root/serverkaiji.sh #!/bin/bash ls /tlvnksc/ | egrep -v "^c|^f" > /root/service.lis ...

  6. 吴裕雄--天生自然Django框架开发笔记:Django 创建第一个项目

    Django 管理工具 安装 Django 之后,您现在应该已经有了可用的管理工具 django-admin.可以使用 django-admin 来创建一个项目: 可以来看下django-admin ...

  7. 一天一个设计模式——Prototype 原型模式

    一.模式说明 看了比较多的资料,对原型模式写的比较复杂,个人的理解就是模型复制,根据现有的类来直接创建新的类,而不是调用类的构造函数. 那为什么不直接调用new方法来创建类的实例呢,主要一个原因是如果 ...

  8. .NET技术-4.0. NETCORE跨域

    .NET技术-4.0. NETCORE跨域 1.安装程序CORS程序包,一般默认都带了此程序包的 Install-Package Microsoft.AspNetCore.Mvc.Cors 2.配置C ...

  9. 无车承运前世今生,5G货运管家期待您的加入

    历时三年的无车承运人试点工作结束,从2020年1月1日起,将执行新的暂行<办法>,在这样一个承前启后的阶段,无车承运人的命运如何?网络货运经营者又是何物? 在新赛道下,将迎来什么样的机遇和 ...

  10. Spark核心算子

    Spark RDD: Transformation Meaning map(func) 返回一个新的分布式数据集,该数据集是通过将源的每个元素传递给函数func处理形成的. filter(func) ...