迷宫收集星星 并查集解答
群里发的来历不明的题目 可使用深搜广搜解决 我试了试并查集 效率不是很高
题目描述
解答 并查集
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
迷宫收集星星 并查集解答相关推荐
- 小希的迷宫 HDU - 1272 (并查集)
思路: 当图中的集合(连通子图)个数为1并且边数等于顶点数-1(即改图恰好为一棵生成树)时,输出Yes. 此题的坑:(1) 如果只输入0 0算作一组数据的话答案应该输出Yes (2) 输入数据可能并不 ...
- canvas并查集画随机迷宫
之前学习不想交集合(并查集)的数据结构,看了很多大老用窗体画出随机迷宫,感觉挺震撼的,下心学习了一下. 这个过程想着不太复杂,就是做起来挺麻烦,需要自己一点点处理.大概步骤如下 1:定义好不想交集合的 ...
- hdu 1272 小希的迷宫 (并查集)
小希的迷宫 Time Limit: 2000/1000 ...
- HDOJ---1272 小希的迷宫[并查集]
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- [3.3训练赛]One-Dimensional(矩阵快速幂),Freda的迷宫(无向图强连通分量+并查集),一道防AK好题
文章目录 T1:One-Dimensional title solution code T2:[NOIP模拟赛]Freda的迷宫 title solution code T3:[NOIP模拟赛]一道防 ...
- HDU——1272小希的迷宫(并查集+拓扑排序)
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- HDU1272 小希的迷宫【并查集】
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- 并查集(小西的迷宫)
上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了 ...
- 小希的迷宫 HDU - 1272---并查集+思维
上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了 ...
最新文章
- Navicat连接数据库成功,新建查询时提示错误“Cannot create file ……”
- mysql1300错误什么意思_mysql error 1201-1300错误大全
- 清华源安装指定版本tensorflow
- main函数解析(一)——Linux-0.11 学习笔记(五)
- ADOQuery代替ClientDataSet做3-Tier系统
- 为什么要使用工业以太网交换机?
- 使用React Native进行气泡动画
- chattr和lsattr的基本用法
- Skype国际版下载方法
- GD32f103介绍第一章
- java hl7_HL7中文完整版及代码实例
- 微信小程序 还在为滑动加载数据烦劳吗? 封装滚动加载方法 看了就会
- 东华大学计算机考研资料汇总
- 在UE4中创建新的Shading Model
- 实习之路0--设计模式之策略模式的理解(鸭子类例子)
- 2022电商年货节活动时间介绍,电商年货节红包如何领取?
- 多点相册--将手机的照片和视频备份到电脑的工具
- python代码画樱花主要特色,手机python代码画樱花
- iceoryx(冰羚)-IPC中间件交叉编译
- 图形驱动程序和显卡驱动什么区别_你的安卓机以后也要单独安装显卡驱动程序喽...