POJ 1128 Frame Stacking(拓扑排序)
来源:互联网 发布:阿里云大数据平台 sql 编辑:程序博客网 时间:2024/05/29 16:04
本题需要一些构图上的小优化,构图之后博主我选择使用DFS来进行拓扑排序的操作,详情见代码
#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<iostream>#include<cstdlib>#include<string>#include<cassert>#include<set>#include<vector>#include<stack>#include<queue>#define clean(n,m) memset(n,m,sizeof(n))using namespace std;#define maxn 32#define maxm 28char map[maxn][maxm], ans[maxm];int m, n, in[maxn], total;bool edge[maxn][maxm];struct Node{ int x, y;}lt[maxm],rb[maxm];void getMap(){ clean(edge, false); clean(in, -1); clean(lt, 0x3f); clean(rb, -1); for (int i = total = 0;i < n;i++) { for (int j = 0;j < m;j++) { if (map[i][j] == '.') continue; int t = map[i][j] - 'A'; if (in[t] == -1) { in[t] = 0; total++; } if (i < lt[t].x) lt[t].x = i; if (i > rb[t].x) rb[t].x = i; if (j < lt[t].y) lt[t].y = j; if (j > rb[t].y) rb[t].y = j; } } for (int i = 0;i < maxn;i++) { if (in[i] == -1) continue; for (int x = lt[i].x;x <= rb[i].x;x++) { for (int y = lt[i].y;y <= rb[i].y;y++) { if (x > lt[i].x&&y > lt[i].y&&x < rb[i].x&&y < rb[i].y) continue; int t = map[x][y] - 'A'; if (t != i&&!edge[i][t]) { edge[i][t] = true; in[t]++; } } } }}void dfs(int id){ if (id == total) { ans[id] = '\0'; cout << ans << endl; return; } for (int i = 0;i < maxn;i++) { if (in[i] == 0) { ans[id] = 'A' + i; in[i] = -1; for (int j = 0;j < maxn;j++) { if (edge[i][j]) in[j]--; } dfs(id + 1); in[i] = 0; for (int j = 0;j < maxn;j++) { if (edge[i][j]) in[j]++; } } }}int main(){ while (cin >> n >> m) { for (int i = 0;i < n;i++) cin >> map[i]; getMap(); dfs(0); } return 0;}
0 0
- [POJ 1128] Frame Stacking (拓扑排序)
- poj 1128 Frame Stacking(拓扑排序)
- POJ 1128 Frame Stacking(拓扑排序)
- POJ 1128 Frame Stacking (拓扑排序)
- poj 1128 Frame Stacking (建图+拓扑排序)
- POJ--1128--Frame Stacking【拓扑排序】
- POJ 1128 Frame Stacking dfs+拓扑排序
- POJ 1128 Frame Stacking 拓扑排序+暴搜
- poj 1128 Frame Stacking(DFS+拓扑排序)
- POJ 1128 Frame Stacking(拓扑排序+DFS)
- POJ 1128 Frame Stacking(拓扑排序+dfs)
- POJ 1128 Frame Stacking(拓扑排序+dfs)
- poj 1128 Frame Stacking(DFS+拓扑排序)
- poj 1128 Frame Stacking 拓扑
- POJ 1128 & ZOJ 1083 Frame Stacking (拓扑排序)
- 【poj】1128 Frame Stacking【拓扑排序+输出字典序】
- poj 1128 Frame Stacking(拓扑排序+DFS(递归))
- POJ 1128 Frame Stacking(拓扑排序·打印字典序)
- android 上拉下拉刷新和banner轮播广告条 Github 项推荐
- 删除登录名下的用户
- 20170503MFC06_Date和Calender
- QQ红包技术方案全解密
- 第六 文本处理工具
- POJ 1128 Frame Stacking(拓扑排序)
- Crash符号化
- 分布式系统唯一ID生成方案
- 游戏图像学习入门到精通-Shader总结篇
- [Leetcode] 128. Longest Consecutive Sequence 解题报告
- c++之continue
- phpcms不允许评论仍然能提交评论的BUG修复
- 从tomcat迁移到websphere的问题记录
- 欢迎使用CSDN-markdown编辑器