SCU2016-04 B题 枚举+ bfs最短路
来源:互联网 发布:广电网络网上营业厅 编辑:程序博客网 时间:2024/05/19 08:46
Analyse:
用bfs处理相互之间的最短路,然后dfs枚举这个路径的所有情况。
复杂度:
Get:
数据小的,尽管暴力就是了。
/**********************jibancanyang************************** *Author* :jibancanyang *Created Time* : 一 7/11 09:59:19 2016**Problem**:**Code**:***********************1599664856@qq.com**********************/#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <set>#include <map>#include <string>#include <cmath>#include <cstdlib>#include <ctime>#include <stack>using namespace std;typedef pair<int, int> pii;typedef long long ll;typedef unsigned long long ull;typedef vector<int> vi;#define pr(x) cout << #x << ": " << x << " " #define pl(x) cout << #x << ": " << x << endl;#define pri(a) printf("%d\n",(a))#define xx first#define yy second#define sa(n) scanf("%d", &(n))#define sal(n) scanf("%lld", &(n))#define sai(n) scanf("%I64d", &(n))#define vep(c) for(decltype((c).begin() ) it = (c).begin(); it != (c).end(); it++) const int mod = int(1e9) + 7, INF = 0x3f3f3f3f;const int maxn = 1e5 + 13;char G[109][109];int n, m, k;int sx, sy;int dirx[] = {-1, 0, 1, 0};int diry[] = {0, 1, 0, -1};struct node { int x, y, step; node(){} node(int a, int b, int c): x(a), y(b), step(c){}};bool vis[109][109];int bfs(int sx, int sy, int ex, int ey){ memset(vis, false, sizeof(vis)); queue<node> que; int ret = INF; node t = node(sx, sy, 0); que.push(t); while (!que.empty()) { node cur = que.front(); que.pop(); if (cur.x == ex && cur.y == ey) { ret = cur.step; break; } vis[cur.x][cur.y] = true; for (int i = 0; i < 4; i++) { node nxt(cur.x + dirx[i], cur.y + diry[i], cur.step + 1); if (nxt.x > 0 && nxt.x <= n && nxt.y > 0 && nxt.y <= m && (G[nxt.x][nxt.y] == '.')) { if (!vis[nxt.x][nxt.y]) que.push(nxt); vis[nxt.x][nxt.y] = true; } } } return ret;}pii aim[5];int d[5][5];bool vv[10];int ans = INF;void dfs(int s, int l, int par) { if (l >= ans) return; if (s == k) { ans = min(ans, l); return; } for (int i = 0; i < k; i++) { if (!vv[i]) { vv[i] = true; dfs(s + 1, l + d[par][i], i); vv[i] = false; } }}int main(void){#ifdef LOCAL freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout);#endif while (scanf("%d%d", &n, &m)) { ans = INF; if (n == 0 && m == 0) break; for (int i = 1; i <= n; i++) { getchar(); for (int j = 1; j <= m; j++) { scanf("%c", &G[i][j]); if (G[i][j] == '@') G[i][j] = '.', sx = i, sy = j; } } sa(k); for (int i = 0; i < k; i++) { scanf("%d%d", &aim[i].xx, &aim[i].yy); } aim[k].xx = sx, aim[k].yy = sy; for (int i = 0; i <= k; i++) { for (int j = 0; j <= k; j++) { d[i][j] = bfs(aim[i].xx, aim[i].yy, aim[j].xx, aim[j].yy); } } memset(vv, false, sizeof(vv)); dfs(0, 0, k); pri(ans == INF ? -1 : ans); } return 0;}
0 0
- SCU2016-04 B题 枚举+ bfs最短路
- UVALive-7220 Dungeon Trap【最短路Bfs+思维枚举】好题~
- SCU 4526 最短路(dijkstra+枚举+BFS)
- CodeForces 543B Destroying Roads(最短路BFS)
- Codeforces Round #361 (Div. 2) B BFS最短路
- CodeForces 543B Destroying Roads(最短路 + 枚举)
- SCU2016-04 A题
- bfs最短路
- hdu1548 最短路/BFS
- BFS最短路路径
- hdu2433 BFS最短路
- hdu3986枚举+最短路
- hdu2363 枚举+最短路
- hdu2363 枚举最短路
- 情人节专场 B题 最短路
- 最短路 -B
- SCU2016-04 C题模拟
- HDU 4171 bfs&&最短路
- mysql获取某个表的所有字段名
- Unity5-ABSystem(五):AssetBundle内存
- 局域网机器间传输大文件,文件共享是正路
- 性能优化中CPU、内存、磁盘IO、网络性能的依赖
- wampserver 集成环境 上传文件$_FILES 返回 empty
- SCU2016-04 B题 枚举+ bfs最短路
- 神奇的快速幂
- bolts-android
- 剑指offer(52)-链表中环的入口结点
- va_list使用及原理
- IOS中导入OpenCV
- c++ primer plus 学习第一天--第二章
- 在Robot FrameWork中引用自定义关键字的过程
- 走遍世界 —— 爱尔兰