群里发的来历不明的题目 可使用深搜广搜解决 我试了试并查集 效率不是很高

题目描述

解答 并查集

  1 #include <iostream>
  2 #include <vector>
  3
  4
  5 using namespace std;
  6 const int maxn = 1e5 + 7;
  7 int pre[maxn];
  8
  9 int Find(int x)
 10 {
 11     int p, tmp;
 12     p = x;
 13     while (x != pre[x])
 14         x = pre[x];
 15     while (p != x)
 16     {
 17         tmp = pre[x];
 18         pre[x] = x;
 19         p = tmp;
 20     }
 21     return x;
 22 }
 23
 24 void join(int x, int y)
 25 {
 26     int fx = Find(x);
 27     int fy = Find(y);
 28     if (fx != fy)
 29         pre[fx] = fy;
 30 }
 31
 32 bool Same(int x, int y)
 33 {
 34     return Find(x) == Find(y);
 35 }
 36
 37
 38 int m = 4; int n = 8;
 39
 40 vector<vector<char>> vmap(4, vector<char>(8, '.'));
 41
 42 void Init()
 43 {
 44     vmap[0][2] = '#';
 45     vmap[0][6] = '*';
 46
 47     vmap[1][0] = '*';
 48     vmap[1][2] = '#';
 49     vmap[1][4] = 'S';
 50     vmap[1][5] = '#';
 51
 52     vmap[2][0] = '#';
 53     vmap[2][1] = '#';
 54     vmap[2][2] = '#';
 55     vmap[2][3] = '#';
 56     vmap[2][4] = '#';
 57     vmap[2][5] = '#';
 58
 59     vmap[3][1] = '*';
 60     vmap[3][4] = '#';
 61     vmap[3][6] = '*';
 62
 63     for (int i = 0; i < 4; i++) {
 64         for (int j = 0; j < 8; j++) {
 65             cout << vmap[i][j] << " ";
 66         }
 67         cout << endl;
 68     }
 69
 70     for (int i = 0; i < maxn; i++) {
 71         pre[i] = i;
 72     }
 73
 74
 75 }
 76
 77 int GetId(int x, int y)
 78 {
 79     return (x +1)* 10 + (y+1);
 80 }
 81
 82 int main()
 83 {
 84     //std::cout << "Hello World!\n";
 85     Init();
 86     int myId = -1;
 87     vector<int> record;
 88     for (int i = 0; i < 4; i++) {
 89         for (int j = 0; j < 8; j++) {
 90             if (vmap[i][j] == '#')
 91                 continue;
 92
 93             if ((i + 1) < 4 && vmap[i+1][j] != '#') {
 94                 int Id = GetId(i, j);
 95                 int Id1 = GetId(i + 1, j);
 96                 join(Id ,Id1);
 97             }
 98
 99             if ((j + 1) < 8 && vmap[i][j+1] != '#')
100             {
101                 int Id = GetId(i, j);
102                 int Id1 = GetId(i , j+1);
103                 join(Id, Id1);
104
105             }
106
107             if ((i - 1) > 0 && vmap[i - 1][j] != '#') {
108                 int Id = GetId(i, j);
109                 int Id1 = GetId(i - 1, j);
110                 join(Id, Id1);
111
112             }
113
114             if ((j - 1) > 0 && vmap[i][j - 1] != '#') {
115                 int Id = GetId(i, j);
116                 int Id1 = GetId(i , j-1);
117                 join(Id, Id1);
118             }
119
120             if (vmap[i][j] == '*') {
121                 record.push_back(GetId(i,j));
122             }
123             else if (vmap[i][j] == 'S') {
124                 myId = GetId(i, j);
125             }
126         }
127     }
128     int count = 0;
129     for (auto& e : record) {
130         if (Same(e, myId)) {
131             count++;
132         }
133     }
134     cout << count;
135 }

View Code

转载于:https://www.cnblogs.com/itdef/p/10901240.html

迷宫收集星星 并查集解答相关推荐

  1. 小希的迷宫 HDU - 1272 (并查集)

    思路: 当图中的集合(连通子图)个数为1并且边数等于顶点数-1(即改图恰好为一棵生成树)时,输出Yes. 此题的坑:(1) 如果只输入0 0算作一组数据的话答案应该输出Yes (2) 输入数据可能并不 ...

  2. canvas并查集画随机迷宫

    之前学习不想交集合(并查集)的数据结构,看了很多大老用窗体画出随机迷宫,感觉挺震撼的,下心学习了一下. 这个过程想着不太复杂,就是做起来挺麻烦,需要自己一点点处理.大概步骤如下 1:定义好不想交集合的 ...

  3. hdu 1272 小希的迷宫 (并查集)

    小希的迷宫                                                                          Time Limit: 2000/1000 ...

  4. HDOJ---1272 小希的迷宫[并查集]

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  5. [3.3训练赛]One-Dimensional(矩阵快速幂),Freda的迷宫(无向图强连通分量+并查集),一道防AK好题

    文章目录 T1:One-Dimensional title solution code T2:[NOIP模拟赛]Freda的迷宫 title solution code T3:[NOIP模拟赛]一道防 ...

  6. HDU——1272小希的迷宫(并查集+拓扑排序)

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  7. HDU1272 小希的迷宫【并查集】

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  8. 并查集(小西的迷宫)

    上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了 ...

  9. 小希的迷宫 HDU - 1272---并查集+思维

    上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了 ...

最新文章

  1. Navicat连接数据库成功,新建查询时提示错误“Cannot create file ……”
  2. mysql1300错误什么意思_mysql error 1201-1300错误大全
  3. 清华源安装指定版本tensorflow
  4. main函数解析(一)——Linux-0.11 学习笔记(五)
  5. ADOQuery代替ClientDataSet做3-Tier系统
  6. 为什么要使用工业以太网交换机?
  7. 使用React Native进行气泡动画
  8. chattr和lsattr的基本用法
  9. Skype国际版下载方法
  10. GD32f103介绍第一章
  11. java hl7_HL7中文完整版及代码实例
  12. 微信小程序 还在为滑动加载数据烦劳吗? 封装滚动加载方法 看了就会
  13. 东华大学计算机考研资料汇总
  14. 在UE4中创建新的Shading Model
  15. 实习之路0--设计模式之策略模式的理解(鸭子类例子)
  16. 2022电商年货节活动时间介绍,电商年货节红包如何领取?
  17. 多点相册--将手机的照片和视频备份到电脑的工具
  18. python代码画樱花主要特色,手机python代码画樱花
  19. iceoryx(冰羚)-IPC中间件交叉编译
  20. 图形驱动程序和显卡驱动什么区别_你的安卓机以后也要单独安装显卡驱动程序喽...

热门文章

  1. vue Iframe
  2. ICG游戏:证明,先手不是必胜就是必败。
  3. DC的网络连接端口与防火墙设置[为企业部署Windows Server 2008系列十]
  4. 在Linux上自动调整屏幕亮度保护眼睛
  5. [SinGuLaRiTy] 2017 百度之星程序设计大赛 初赛A
  6. 为什么Nginx性能比Apache高
  7. Ctrl+Alt组合键在VMware虚拟机中如何使用
  8. vmware不能和主机相连
  9. Extjs4.1 vtype验证
  10. windows server 2008 r2之间的ftp传输脚本