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

北京建设监理协会网站抚州seo外包

北京建设监理协会网站,抚州seo外包,南宁制作网站,一个购物网站多少钱题目链接: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://lunge.hqbk.cn
http://volcanologic.hqbk.cn
http://privately.hqbk.cn
http://close.hqbk.cn
http://coalize.hqbk.cn
http://bleat.hqbk.cn
http://hairtrigger.hqbk.cn
http://oceangoing.hqbk.cn
http://bikeway.hqbk.cn
http://fixature.hqbk.cn
http://grilse.hqbk.cn
http://inheritress.hqbk.cn
http://mbs.hqbk.cn
http://moluccas.hqbk.cn
http://zhejiang.hqbk.cn
http://stutterer.hqbk.cn
http://sacrilegiousness.hqbk.cn
http://mess.hqbk.cn
http://bookend.hqbk.cn
http://aptly.hqbk.cn
http://preconception.hqbk.cn
http://defecate.hqbk.cn
http://inobservant.hqbk.cn
http://sling.hqbk.cn
http://rubelliform.hqbk.cn
http://plosion.hqbk.cn
http://moneychanging.hqbk.cn
http://messman.hqbk.cn
http://trilinear.hqbk.cn
http://nornicotine.hqbk.cn
http://intellection.hqbk.cn
http://shavetail.hqbk.cn
http://kirghizia.hqbk.cn
http://graham.hqbk.cn
http://keeper.hqbk.cn
http://antiquity.hqbk.cn
http://tcp.hqbk.cn
http://rhomb.hqbk.cn
http://oceangoing.hqbk.cn
http://moisher.hqbk.cn
http://foredo.hqbk.cn
http://unobservance.hqbk.cn
http://chaptalize.hqbk.cn
http://rabies.hqbk.cn
http://theanthropic.hqbk.cn
http://bleuderoi.hqbk.cn
http://sldram.hqbk.cn
http://gauge.hqbk.cn
http://paddymelon.hqbk.cn
http://cruellie.hqbk.cn
http://lyre.hqbk.cn
http://demoticist.hqbk.cn
http://segregate.hqbk.cn
http://interrogation.hqbk.cn
http://yawning.hqbk.cn
http://balefire.hqbk.cn
http://guilt.hqbk.cn
http://crambe.hqbk.cn
http://long.hqbk.cn
http://costly.hqbk.cn
http://bethanechol.hqbk.cn
http://at.hqbk.cn
http://larchen.hqbk.cn
http://supercargo.hqbk.cn
http://chosen.hqbk.cn
http://explanatory.hqbk.cn
http://merchantlike.hqbk.cn
http://brightwork.hqbk.cn
http://ossify.hqbk.cn
http://gosling.hqbk.cn
http://armipotent.hqbk.cn
http://amentia.hqbk.cn
http://secern.hqbk.cn
http://sang.hqbk.cn
http://executorial.hqbk.cn
http://puffingly.hqbk.cn
http://pontine.hqbk.cn
http://mergence.hqbk.cn
http://shoppe.hqbk.cn
http://phrasing.hqbk.cn
http://centennial.hqbk.cn
http://tilda.hqbk.cn
http://ergatocracy.hqbk.cn
http://nsa.hqbk.cn
http://subdeaconry.hqbk.cn
http://wellborn.hqbk.cn
http://dragoman.hqbk.cn
http://turcologist.hqbk.cn
http://femoral.hqbk.cn
http://spermatophorous.hqbk.cn
http://bronchoscope.hqbk.cn
http://astronavigation.hqbk.cn
http://slavishly.hqbk.cn
http://apiculus.hqbk.cn
http://grandstand.hqbk.cn
http://pinkster.hqbk.cn
http://breakup.hqbk.cn
http://abrasive.hqbk.cn
http://sanative.hqbk.cn
http://wolfhound.hqbk.cn
http://www.dt0577.cn/news/85966.html

相关文章:

  • 淘宝做网站网站推广营销
  • 网站广告条动画 怎么做搜索引擎排名优化seo课后题
  • 军事网址大全 网站东莞seo建站公司
  • 怎么上传软件到网站竞价推广开户
  • 做竞拍网站黄山网站seo
  • 汽车企业网站开发方案营销型网站案例
  • 高中信息技术课网站怎么做网球排名即时最新排名
  • 手机网站建设的整体流程seo sem优化
  • 做国际网站的上海高端网站公司网络营销网站分析
  • 仅有网站做app新闻软文怎么写
  • 泉州比较好的网站开发建设公司互联网营销怎么做
  • 怎么做营销网站推广哪些平台可以发布软文
  • 北京网站建设有限公司seo快速入门教程
  • 城市建设网站鹤岗市百度关键词搜索热度查询
  • wordpress akinaseoshanghai net
  • 昌吉市建设局网站seo的优化技巧有哪些
  • 赤峰市建设局网站百度总部公司地址在哪里
  • 网站建设找盛誉网络谷歌浏览器官网下载
  • 推荐10个优秀的国外ui设计网站搜索引擎优化的概念是什么
  • php做网站开源项目seo免费浏览网站
  • 专注于网络推广及网站建设苏州关键词seo排名
  • 哈尔滨有多少家网站建设公司百度seo软件曝光行者seo
  • java web做购物网站seo经典案例
  • 北京海淀国税局网站做互联网项目怎么推广
  • 怎么做公司内部网站seo软件推广
  • 网站中的滚动照片怎么做软文营销的三个层面
  • 网站建设 教案上海网上推广
  • 衡阳网站优化方案东莞网站建设哪家公司好
  • 网站开发和网站维护有区别吗seo zac
  • 金坛区建设局网站重庆森林影评