描述

一个连通图采用邻接表作为存储结构。设计一个算法,判断无向图中任意给定的两点是否存在一条长度为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 ;
}

最新文章

  1. js排序算法总结——冒泡,快速,选择,插入,希尔,归并
  2. 如何部署Icinga客户端
  3. Android first --- 单元测试框架junit
  4. WP老杨解迷:可知评论系统还能勾搭用户呢
  5. 把应用程序exe 注册成为windows 服务的方法
  6. 白话LINQ系列1---什么是LINQ?
  7. PHP安装所最到的问题-解决方案
  8. ASP.NET实现折线图的绘制
  9. nodejs这个过程POST求
  10. mysql模拟插入数据表
  11. 关于code reivew
  12. Redis学习-持久化
  13. DelayQueue使用
  14. 安装mysql后运行.net程序出错
  15. JS学习笔记 等于和包装对象
  16. 微擎开发------day04
  17. 用命令让vbox的虚拟硬盘文件转换成vmware的vmdk
  18. ngxinx 配置
  19. WIN7安装jdk1.7
  20. C# 验证XML

热门文章

  1. POJ 2226 缩点建图+二分图最大匹配
  2. 爱奇艺用券付费VIP电影+python爬虫程序+可视化界面+下载本地
  3. flink和spark Streaming中的Back Pressure
  4. 大数据高可用集群环境安装与配置(03)——设置SSH免密登录
  5. 应用架构的演进--MVC,RPC,SOA,微服务架构
  6. hdu1232 城镇间修路(并查集)
  7. centos7.4 测试CPU压力--命令搞定
  8. P1618 三连击(升级版)
  9. String 字符串拼接
  10. Springboot JpaRepository findOne() 方法报错