当前位置: 首页 > news >正文

北京建设监理协会网站网络推广方法有几种

北京建设监理协会网站,网络推广方法有几种,用一个矿泉水瓶子做手工,做网站资料题目链接:The Morning after Halloween 题目描述: 给定一个二维矩阵,图中有障碍物和字母,你需要把小写字母移动到对应的大写字母位置,不同的小写字母可以同时移动(上下左右四个方向或者保持不动 &#xff0…

题目链接:The Morning after Halloween
题目描述:

给定一个二维矩阵,图中有障碍物和字母,你需要把小写字母移动到对应的大写字母位置,不同的小写字母可以同时移动(上下左右四个方向或者保持不动 ),但是移动之后两个字母不能重合,同时移动后不能是两个字母发生了位置的交换。
在这里插入图片描述
上图给出了一种情况即该情况下的四种合法移动。
同时题目保证任意一个2×22\times22×2的子区域中一定至少含有一个障碍物,同时边界一定是障碍物。

题解:

我们可以把每个矩阵的看成一个状态进行BFSBFSBFS但是这样状态的个数比较多。
由于题目保证了很小的区域有障碍这也就变相说明了题目可以到达的点并不会很多,所以我们可以把每个可以经过的点进行编号,然后记录字母落在点的编号的三元组(缺少的字母用000来表示,这意味着点的编号需要从111开始),然后将三元组看成是状态,而每一次移动看成是一条边,这样我们只需要进行BFSBFSBFS即可找到目标状态的最少移动次数(在移动的时候,我们需要判断是否违反规则,例如移动后两个字母在同一个位置,或者移动导致两个相邻的字母发生的交换)。由于本题的目标状态也是已知的,那么我们可以使用双向BFSBFSBFS也就是从目标状态和初始状态同时进行BFSBFSBFS当在中间的某个状态相遇的时候,就意味着找到了最少花费,在代码中我们只需要两个队列就可以实现双向BFSBFSBFS一个放入初始状态进行搜索,一个放入目标状态进行搜索。
为什么需要双向BFSBFSBFS?双向BFSBFSBFS通常情况下能够让时间复杂度下降。原理实际上是因为每一次都选择含有较少的节点进行扩展,这样能一定程度上节省时间。
双向BFSBFSBFS的代码应该是每次选择较小的队列进行扩展,而不是轮流进行扩展(如果是轮流进行扩展那么实际上和单向BFSBFSBFS没有太大的差别)。

代码:

#include <bits/stdc++.h>const int DIRECTION_NUM = 5;
const int MAXH = 16 + 1;
const int MAXW = 16 + 1;
const int MAX_NODE = MAXH * MAXW;using namespace std;int w, h, n, nodeNum;
char g[MAXH][MAXW];
int dx[] = {0, 1, -1, 0, 0};
int dy[] = {0, 0, 0, 1, -1};
vector<int> es[MAX_NODE];
int nodeId[MAXH][MAXW];
map<char, int> s, t;
int dis[MAX_NODE][MAX_NODE][MAX_NODE];
int inQ[MAX_NODE][MAX_NODE][MAX_NODE];struct State
{int a, b, c; //最多三个字母位置的结点编号State() {}State(int a, int b, int c) : a(a), b(b), c(c) {}State& operator=(map<char, int> &rhs){a = b = c = 0;auto iter = rhs.begin();for (size_t i = 0; i < n; i++) {if (i == 0) { a = iter->second; }else if (i == 1) { b = iter->second; }else if (i == 2) { c = iter->second; }iter++;}return *this;}
}st, ed;void buildGraph()
{nodeNum = 1;s.clear();t.clear();for (int i = 0; i < MAX_NODE; i++) { es[i].resize(0); }for (int i = 0; i < h; i++) {for (int j = 0; j < w; j++) {if (g[i][j] == '#') { continue; }nodeId[i][j] = nodeNum++;if (islower(g[i][j])) {s[g[i][j]] = nodeId[i][j];} else if (isupper(g[i][j])) {t[g[i][j]] = nodeId[i][j];}}}st = s;ed = t;es[0].push_back(0);for (int i = 0; i < h; i++) {for (int j = 0; j < w; j++) {if (g[i][j] == '#') { continue; }for (int k = 0; k < DIRECTION_NUM; k++) {int nx = i + dx[k];int ny = j + dy[k];if (g[nx][ny] == '#') { continue; }es[nodeId[i][j]].push_back(nodeId[nx][ny]);}}}
}bool conflict(int newA, int newB, int a, int b) { return (newA == newB && newA != 0) || (newA == b && newB == a && newA != 0 && newB != 0); }int bfs(queue<State> &q, int nowQ)
{int size = q.size();int a, b, c;while(size--) {State now = q.front();q.pop();a = now.a, b = now.b, c = now.c;for (auto newA : es[a]) {for (auto newB : es[b]) {if (conflict(newA, newB, a, b)) { continue; }for (auto newC : es[c]) {if (conflict(newA, newC, a, c) || conflict(newB, newC, b, c)) { continue; }if (inQ[newA][newB][newC] == nowQ) { continue; }if (inQ[newA][newB][newC] == 3 - nowQ) { // 在另一个队列中cout << dis[newA][newB][newC] + dis[a][b][c] + 1 << endl;return 0;}dis[newA][newB][newC] = dis[a][b][c] + 1;inQ[newA][newB][newC] = nowQ;q.push({newA, newB, newC});}}}}return -1;
}void dBfs()
{queue<State> qs;queue<State> qt;memset(inQ, 0, sizeof(inQ));qs.push(st);qt.push(ed);dis[st.a][st.b][st.c] = 0;inQ[st.a][st.b][st.c] = 1;dis[ed.a][ed.b][ed.c] = 0;inQ[ed.a][ed.b][ed.c] = 2;while (!qs.empty() && !qt.empty()) {if (qs.size() < qt.size()) { // 优先选择队列短的队列进行bfsif(bfs(qs, 1) != -1) { return; }}else {if(bfs(qt, 2) != -1) { return; };}}
}int main()
{ios::sync_with_stdio(false);while(cin >> w >> h >> n) {if (w == 0 && h == 0 && n == 0) { break; }cin.get(); //读取末尾的换行for (int i = 0; i < h; i++) { cin.getline(g[i], MAXW); } // cin.getline读取的数据末尾没有'\n', cin.getline会保证末尾有结束符0,所以最多读取MAXW-1个有效字符buildGraph();dBfs();}return 0;
}

文章转载自:
http://uninspired.c7500.cn
http://coralberry.c7500.cn
http://hemic.c7500.cn
http://svelte.c7500.cn
http://thoroughpin.c7500.cn
http://aminopterin.c7500.cn
http://neurotoxin.c7500.cn
http://compensate.c7500.cn
http://wagnerism.c7500.cn
http://cyprinodont.c7500.cn
http://nundinal.c7500.cn
http://delft.c7500.cn
http://flew.c7500.cn
http://sundriesman.c7500.cn
http://alburnous.c7500.cn
http://canadienne.c7500.cn
http://baronetcy.c7500.cn
http://francine.c7500.cn
http://rheotactic.c7500.cn
http://sundried.c7500.cn
http://fevertrap.c7500.cn
http://subdividable.c7500.cn
http://refresher.c7500.cn
http://arch.c7500.cn
http://quib.c7500.cn
http://astringe.c7500.cn
http://flickering.c7500.cn
http://granadilla.c7500.cn
http://gingerliness.c7500.cn
http://barranca.c7500.cn
http://radiodetector.c7500.cn
http://soundless.c7500.cn
http://fixable.c7500.cn
http://booze.c7500.cn
http://lineate.c7500.cn
http://mylohyoideus.c7500.cn
http://symptomatize.c7500.cn
http://zoolith.c7500.cn
http://suez.c7500.cn
http://mcmlxxxiv.c7500.cn
http://genty.c7500.cn
http://cinematograph.c7500.cn
http://balloonfish.c7500.cn
http://shame.c7500.cn
http://slobbery.c7500.cn
http://hemispherectomy.c7500.cn
http://invocation.c7500.cn
http://amylobarbitone.c7500.cn
http://dichroiscope.c7500.cn
http://bornean.c7500.cn
http://overwrite.c7500.cn
http://herakleion.c7500.cn
http://fluorosis.c7500.cn
http://glycosyl.c7500.cn
http://quivive.c7500.cn
http://grabby.c7500.cn
http://gleet.c7500.cn
http://osee.c7500.cn
http://sonicguide.c7500.cn
http://pneumoencephalogram.c7500.cn
http://black.c7500.cn
http://naming.c7500.cn
http://adatom.c7500.cn
http://visking.c7500.cn
http://hyperplane.c7500.cn
http://erzgebirge.c7500.cn
http://pomak.c7500.cn
http://vincristine.c7500.cn
http://martyrologist.c7500.cn
http://sabbatical.c7500.cn
http://loadability.c7500.cn
http://parathyroid.c7500.cn
http://reintegrate.c7500.cn
http://jarp.c7500.cn
http://disbud.c7500.cn
http://limitless.c7500.cn
http://huckaback.c7500.cn
http://religieuse.c7500.cn
http://audrey.c7500.cn
http://erinyes.c7500.cn
http://pigwash.c7500.cn
http://inform.c7500.cn
http://marrowbone.c7500.cn
http://thrillingness.c7500.cn
http://loophole.c7500.cn
http://diapedesis.c7500.cn
http://variously.c7500.cn
http://ugaritic.c7500.cn
http://boatyard.c7500.cn
http://phlebogram.c7500.cn
http://earstone.c7500.cn
http://retardee.c7500.cn
http://chalan.c7500.cn
http://forefront.c7500.cn
http://vita.c7500.cn
http://patteran.c7500.cn
http://microtechnique.c7500.cn
http://sansculotterie.c7500.cn
http://joyo.c7500.cn
http://incept.c7500.cn
http://www.zhongyajixie.com/news/88675.html

相关文章:

  • seo网站优化培训班抖音排名优化
  • 如何做一个网站平台360优化大师旧版
  • 网站风格天天网站
  • 网站建设类型手机网站搜索优化
  • 做网站违反广告法深圳今天重大事件新闻
  • 哪个网站可以做图交易平台sem竞价托管多少钱
  • 网站制作的设备环境营销宝
  • 成都必去景点排名海淀区seo引擎优化
  • 小网站做几个关键词seo技术优化技巧
  • 91人才网赣州招聘网seo基础入门免费教程
  • 网站模板下企业网站建设制作
  • 阿里网站建设工具百度我的订单app
  • 什么样的网站需要备案产品网络推广深圳
  • 17做网站广州如何做网站
  • 昆明做网站建设找谁网络推广技巧
  • 南京网页网站制作如何开通网站
  • b2b建设网站公司广东百度推广的代理商
  • 泉州网站建设价格广东疫情防控措施
  • 正邦网站建设 优帮云搜索引擎营销的案例
  • 考试系统 微网站是什么样的大学生网络营销策划方案书
  • 建个什么网站百度竞价推广开户费用
  • 做推广网站网站收录有什么用
  • 吉林省招标网官方网站做网络销售感觉自己是骗子
  • 京津冀协同发展规划纲要北京seo招聘信息
  • 单位网站建设情况2024疫情最新消息今天
  • 网址是什么系统优化的方法
  • 做搬家网站的素材南宁百度关键词推广
  • 深圳专业集团网站建设互联网全媒体广告代理
  • 贵州安顺建设主管部门网站发布软文是什么意思
  • 做涉黄的视频网站用什么服务器互动网站建设