DS实验题 Old_Driver UnionFindSet结构 指针实现邻接表存储
题目见前文:DS实验题 Old_Driver UnionFindSet结构
这里使用邻接表存储敌人之间的关系,邻接表用指针实现:
//
// main.cpp
// Old_Driver3
//
// Created by wasdns on 16/12/18.
// Copyright © 2016年 wasdns. All rights reserved.
//
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct edge
{
edge *next;
int num;
//int len;
}eg[105];
struct head
{
edge *next;
int num;
}h[105];
void IniList(int n)
{
int i;
for (i = 1; i <= n; i++)
{
h[i].next = NULL;
h[i].num = i;
}
}
void CreatList(int x, int y)
{
edge *p1, *p2;
p1 = new edge;
p1 -> next = NULL;
p1 -> num = y;
p2 = new edge;
p2 -> next = NULL;
p2 -> num = x;
//p2 -> len = leng;
edge *p3, *p4;
p3 = h[x].next;
if (p3 == NULL) {
h[x].next = p1;
}
else
{
while (p3 -> next != NULL) {
p3 = p3 -> next;
}
p3 -> next = p1;
}
p4 = h[y].next;
if (p4 == NULL) {
h[y].next = p2;
}
else
{
while (p4 -> next != NULL) {
p4 = p4 -> next;
}
p4 -> next = p2;
}
}
bool isAnamy(int x, int y)
{
bool flag = false;
edge* p = new edge;
p = h[x].next;
while (p != NULL)
{
if (p -> num == y)
{
flag = true;
break;
}
p = p -> next;
}
return flag;
}
int fa[105];
void IniFUS(int n)
{
int i;
for (i = 1; i <= n; i++)
{
fa[i] = i;
}
}
int Find(int x)
{
int f = x;
while (f != fa[f])
{
f = fa[f];
}
int i = x, j;
while (i != f)
{
j = fa[i];
fa[i] = f;
i = j;
}
return f;
}
void Union(int x, int y)
{
int xfa = Find(x);
int yfa = Find(y);
if (xfa != yfa) {
fa[yfa] = xfa;
}
}
void Query(int k)
{
int i;
int x, y;
for (i = 1; i <= k; i++)
{
cin >> x >> y;
if (!isAnamy(x, y))
{
if (Find(x) == Find(y)) {
cout << "Good job" << endl;
}
else {
cout << "No problem" << endl;
}
}
else
{
if (Find(x) == Find(y)) {
cout << "OK but..." << endl;
}
else {
cout << "No way" << endl;
}
}
}
}
int main()
{
int n, m, k;
cin >> n >> m >> k;
IniFUS(n);
IniList(n);
int i, x, y, z;
for (i = 1; i <= m; i++)
{
cin >> x >> y >> z;
if (z == 1) Union(x, y);
else if (z == -1)
{
CreatList(x, y);
CreatList(y, x);
}
}
Query(k);
return 0;
}
2016/12/18
DS实验题 Old_Driver UnionFindSet结构 指针实现邻接表存储的更多相关文章
- DS实验题 Old_Driver UnionFindSet结构
题目 思路 很典型的并查集问题,朋友A和B要合并到一个统一的集合中,也就是Union(A, B)操作,在Union操作中需要先找到A所属的集合的代表元和B所属集合的代表元,也就是使用Find(A)和F ...
- DS实验题 融合软泥怪-2 Heap实现
题目和STL实现:DS实验题 融合软泥怪-1 用堆实现优先队列 引言和堆的介绍摘自:Priority Queue(Heaps)--优先队列(堆) 引言: 优先队列是一个至少能够提供插入(Insert) ...
- 图的存储结构(邻接矩阵与邻接表)及其C++实现
一.图的定义 图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为: G=(V,E) 其中:G表示一个图,V是图G中顶点的集合,E是图G中顶点之间边的集合. 注: 在线性表中,元素个数可以为零, ...
- DS实验题 Dijkstra算法
参考:Dijkstra算法 数据结构来到了图论这一章节,网络中的路由算法基本都和图论相关.于是在拿到DS的实验题的时候,决定看下久负盛名的Dijkstra算法. Dijkstra的经典应用是开放最短路 ...
- DS实验题 sights
算法与数据结构实验题 6.3 sights ★实验任务 美丽的小风姑娘打算去旅游散心,她走进了一座山,发现这座山有 n 个景点, 由于山路难修,所以施工队只修了最少条的路,来保证 n 个景点联通,娇弱 ...
- DS实验题 order
算法与数据结构 实验题 6.4 order ★实验任务 给出一棵二叉树的中序遍历和每个节点的父节点,求这棵二叉树的先序和后序遍历. ★数据输入 输入第一行为一个正整数n表示二叉树的节点数目,节点编号从 ...
- DS实验题 Searchname
题目: 思路: 如果直接暴力搜索的话,时间复杂度为O(n*m),在n为百万量级的情况下,必然是T. 所以,这里通过hash函数,将字符串转换为对应的hash值:同时利用邻接表避免了hash冲突,方法是 ...
- typedef struct LNode命名结构指针(线性表的链式存储)
一.typedef 关键字 1. 简介: typedef工具是一个高级数据特性,利用typedef可以为某一些类型自定义名称. 2. 工作原理: 例如我们定义链表的存储结构时,需要定义结点的存储数据元 ...
- c++邻接表存储图(无向),并用广度优先和深度优先遍历(实验)
一开始我是用c写的,后面才发现广搜要用到队列,所以我就直接使用c++的STL队列来写, 因为不想再写多一个队列了.这次实验写了两个多钟,因为要边写边思考,太菜了哈哈. 主要参考<大话数据结构&g ...
随机推荐
- C++基础(2)
c++规定如果一个类对象是另外一类的数据成员,那么在创建对象的时候系统将自动调用那个类的构造函数. 析构函数的定义:析构函数也是特殊的类成员函数,它没有返回类型,没有参数,不能随意调用,也没有重载,只 ...
- 解决页面插入HTML代码后错位(HTML代码里的标签不完整导致错位)
这个的例子是从数据库读取出来的数据内容包含HTML导致页面错位问题! 解决办法如下: 首先过滤掉会跟JS冲突的字符,C#代码如下: string htmlc = Model.HtmlContents. ...
- JAVA基础学习之throws和throw的区别、Java中的四种权限、多线程的使用等(2)
1.throws和throw的区别 throws使用在函数外,是编译时的异常,throw使用在函数内,是运行时的异常 使用方法 public int method(int[] arr) throws ...
- hrbustoj 1551:基础数据结构——字符串2 病毒II(字符串匹配,BM算法练习)
基础数据结构——字符串2 病毒IITime Limit: 1000 MS Memory Limit: 10240 KTotal Submit: 284(138 users) Total Accepte ...
- a个人经验总结
个人经验总结 js中事件有个 on前缀 比如 onclick onmousemove jq中事件省略 on 如 click mousemove html引入其他页面 <iframe src= ...
- IOS8 空项目全屏
打开工程项目属性文件,点击Target下面的第一项,再选择General选项卡,向下找到Use Asset Catalog按钮.点击它. 弹出对话框,点击Migrate即可.这样,应用尺寸就能根据屏幕 ...
- BC#32 1002 hash
代码引用kuangbin大神的,膜拜 第一次见到hashmap和外挂,看来还有很多东西要学 维护前缀和sum[i]=a[0]-a[1]+a[2]-a[3]+…+(-1)^i*a[i] 枚举结尾i,然后 ...
- 电赛总结(二)——AD芯片总结之AD7705
1.特性参数 (1)16位无丢失代码性AD转化器 (2)只需要3.3V供电(即只需要单片机即可供电) (3)双通道差分输入 (4)基准电压为2.5V时,在单极性信号下,输入范围是0到2.5V,在双极性 ...
- CC2540开发板学习笔记(三)——外部中断
一.实验内容 通过外部中断方式依次按下按键S1控制LED1的亮灭 二.实验过程 1.电路原理图同上 2.中断的概念 比如说我们在执行main函数时,突然来了个指令.优先级比现在执行的main还高,那我 ...
- [转]关于int整形变量占有字节问题
int的长度由处理器(16位,32位,64位)和比哪一期决定. 首先从处理器来讲 :16位处理器中的int 占有16位 即2个字节 32位处理器中int ...