拓扑排序(猜序列,LA 4255)
来源:互联网 发布:mac 收音机软件 编辑:程序博客网 时间:2024/06/04 18:10
看来自己图论建模的功底还不够。
百度百科说
图论〔Graph Theory〕是数学的一个分支。它以图为研究对象。图论中的图是由若干给定的点及连接两点的线所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系,用点代表事物,用连接两点的线表示相应两个事物间具有这种关系。
可见图论是将事物建立关系的数学模型。
因此想要利用图论建模,首先就要发现问题中的事物与关系。
代码
#include<bits/stdc++.h>using namespace std;const int maxn = 15;int N;char ch[maxn][maxn];int G[maxn][maxn];int B[maxn];int c[maxn];int r[maxn];int rela(char c){ return c=='+'?1:0;}int t;void dfs(int u){ c[u]=1; for(int v=0;v<=N;v++) if(!c[v]&&G[u][v]) dfs(v); r[t--]=u;}void debug(){ for(int i=1;i<=N;i++) { for(int j=i;j<=N;j++) printf("%c",ch[i][j]); puts(""); }}void topo(){ memset(c,0,sizeof(c)); t=N; for(int i=0;i<=N;i++) if(!c[i]) dfs(i); int num=10; B[r[N]]=10; for(int i=N-1;i>=0;i--) { int a=min(r[i],r[i+1]); int b=max(r[i],r[i+1]); if(ch[a+1][b]=='0') B[r[i]]=B[r[i+1]]; else B[r[i]]=--num; }}int main(){ int T; scanf("%d",&T); while(T--) { scanf("%d",&N); getchar(); for(int i=1;i<=N;i++) for(int j=i;j<=N;j++) ch[i][j]=getchar(); //debug(); for(int i=0;i<=N;i++) for(int j=i+1;j<=N;j++) { G[i][j]=rela(ch[i+1][j]); G[j][i]=!G[i][j]; } topo(); for(int i=N;i>=0;i--) B[i]-=B[0]; for(int i=1;i<=N;i++) printf("%d%c",B[i]-B[i-1],i==N?'\n':' '); } return 0;}
0 0
- 拓扑排序(猜序列,LA 4255)
- LA 4255 UVa1423 拓扑排序
- LA 4255 Guess 拓扑排序
- uva La 4255 Guess (拓扑排列)
- [LA 6393]Self-Assembly(拓扑排序)
- 拓扑序列以及排序
- ACMclub - 1123 确定排序序列(拓扑排序)
- nyoj496巡回赛-拓扑排序-拓扑序列
- 拓扑排序之变量序列(三种算法实现)
- POJ-3687-Labeling Balls-(求最小字典序拓扑序列)逆向建图-拓扑排序
- 496 巡回赛【拓扑排序,唯一的拓扑序列】
- 拓扑排序之变量序列代码
- 拓扑排序之变量序列算法分析
- UValive 4255 Guess(拓扑排序)
- UA 4255 Guess (拓扑排序)
- UVALive - 4255 - Guess (拓扑排序)
- UvaLive 4255 Guess(拓扑排序)
- UVALive 4255 拓扑排序
- 带有状态的SparkStreaming单词计数程序
- android:single和android:maxLines的区别
- 敏捷开发之Scrum扫盲篇
- 软件测试整理笔记
- 使用随机算法产生一个数,要求把1-1000W之间这些数全部生成
- 拓扑排序(猜序列,LA 4255)
- Android 属性动画(Property Animation) 完全解析
- CentOS系统升级内核
- Java网络编程下之Socket客户端编程
- css基础1-新知识点
- 事件流和return
- Vue源码学习
- javaweb代码和数据分离思考
- 图像处理与计算机视觉基础,经典以及最近发展