Window Pains(poj 2585)
2016-08-11 17:43
232 查看
题意:
一个屏幕要同时打开9个窗口,每个窗口是2*2的矩阵,整个屏幕大小是9*9,每个窗口位置固定。
但是是否被激活(即完整显示出来)不确定。
给定屏幕状态,问是否可以实现显示。
View Code
一个屏幕要同时打开9个窗口,每个窗口是2*2的矩阵,整个屏幕大小是9*9,每个窗口位置固定。
但是是否被激活(即完整显示出来)不确定。
给定屏幕状态,问是否可以实现显示。
分析:拓扑排序,把完全出现的数字拿出来,位置置空,然后再找下一个完全出现的数,直到找完为止,若中途找不到,则不合法。 代码: #include<cstdio> #include<iostream> #include<cstring> using namespace std; int map[20],pos[10][5],vis[10]; void init() { int i=1,j=1; while(i<=9) { pos[i][1]=j;pos[i][2]=j+1;pos[i][3]=j+4;pos[i][4]=j+5; if(i%3==0)j+=2; else j+=1; i++; } } bool ok(int x) { for(int i=1;i<=4;i++) if(map[pos[x][i]]!=x&&map[pos[x][i]]!=0) return false; return true; } void work() { int tot=0; while(1) { int k=0; for(int i=1;i<=9;i++) if(!vis[i]&&ok(i)) { tot++; vis[i]=1; k=i; break; } if(!k)break; for(int i=1;i<=4;i++) map[pos[k][i]]=0; } if(tot<9)printf("THESE WINDOWS ARE BROKEN\n"); else printf("THESE WINDOWS ARE CLEAN\n");}int main(){ init(); while(1) { memset(vis,0,sizeof(vis)); string s;cin>>s; if(s[3]=='O')break; for(int i=1;i<=16;i++) scanf("%d",&map[i]); work(); cin>>s; } return 0; }
View Code
相关文章推荐
- poj 2585,zoj 2193 Window Pains【拓扑排序思想判断图是否存在环】
- poj 2585 Window Pains zoj 2193
- POJ:2585 Window Pains(简单拓扑排序+有难度打map表)
- POJ 2585 Window Pains(拓扑排序)
- POJ 2585 Window Pains(建立优先关系、拓扑排序)
- poj 2585 Window Pains 解题报告
- poj 2585 Window Pains(拓扑排序)(经典)(困难)
- zoj 2193 && poj 2585 Window Pains
- POJ-2585 Window Pains
- POJ 2585 Window Pains 拓扑排序
- POJ 2585 Window Pains(窗口的颜色显示问题,拓扑排序,经典题目)
- poj 2585 Window Pains 暴力枚举排列
- POJ 2585 Window Pains (窗口绘制)(拓扑排序)
- poj 2585 Window Pains 暴力枚举排列
- POJ 2585 Window Pains
- POJ 2585 Window Pains(拓扑排序·窗口覆盖)
- POJ 2585 | ZOJ 2193 Window Pains
- POJ 2585 Window Pains(拓扑排序判定)
- poj 2585 Window Pains 解题报告
- 【POJ】[2585]Window Pains