• POJ 2585 Window Pains 拓扑排序


     题意:

    给了你9种图片 问给的图片能不能由这九种构成

    思路:

    拓扑排序 对能存在的点连边

    如果不存在环的话 这个图就成立 否则不成立

      1 #include<cstdio>
      2 #include<iostream>
      3 #include<cstring>
      4 #define cl(a,b) memset(a,b,sizeof(a))
      5 using namespace std;
      6 
      7 const int maxn=10;
      8 
      9 int T;
     10 int cnt[maxn];
     11 int mp[maxn][maxn];
     12 int num[maxn][maxn];
     13 int cover[maxn][maxn][maxn];
     14 bool vis[maxn];
     15 bool link[maxn][maxn];
     16 
     17 int dx[]= {0,0,1,1};
     18 int dy[]= {0,1,0,1};
     19 
     20 void init()
     21 {
     22     int i,j;
     23     cl(cover,0);
     24     for(int k=0; k<9; k++)
     25     {
     26         i=k/3,j=k%3;
     27         for(int l=0; l<4; l++)
     28         {
     29             int x=i+dx[l];
     30             int y=j+dy[l];
     31             cover[x][y][num[x][y]++]=k+1;
     32         }
     33     }
     34 }
     35 
     36 void build()
     37 {
     38     for(int i=0; i<4; i++)
     39     {
     40         for(int j=0; j<4; j++)
     41         {
     42             for(int k=0; k<num[i][j]; k++)
     43             {
     44                 if((!link[mp[i][j]][cover[i][j][k]])
     45                  &&(mp[i][j]!=cover[i][j][k]))
     46                 {
     47                     link[mp[i][j]][cover[i][j][k]]=true;
     48                     cnt[cover[i][j][k]]++;
     49                 }
     50             }
     51         }
     52     }
     53 }
     54 
     55 bool topsort()
     56 {
     57     while(T--)
     58     {
     59 
     60         int now=1;
     61         while(!vis[now]||(now<=9&&cnt[now]>0))
     62         {
     63             now++;
     64 //            printf("%d
    ",now);
     65         }
     66 
     67         if(now>9)
     68         {
     69             return false;
     70         }
     71         vis[now]=false;
     72         for(int i=1; i<=9; i++)
     73         {
     74             if(vis[i]&&link[now][i])
     75             {
     76                 cnt[i]--;
     77             }
     78         }
     79     }
     80     return true;
     81 }
     82 
     83 int main()
     84 {
     85     init();
     86     char str[maxn];
     87     while(scanf("%s",str)&&str[0]=='S')
     88     {
     89         cl(cnt,0),T=0;
     90         cl(vis,false);
     91         cl(link,false);
     92         for(int i=0; i<4; i++)
     93         {
     94             for(int j=0; j<4; j++)
     95             {
     96                 scanf("%d",&mp[i][j]);
     97                 if(!vis[mp[i][j]])
     98                 {
     99                     T++;
    100                     vis[mp[i][j]]=true;
    101                 }
    102             }
    103         }
    104         build();
    105         scanf("%s",str);
    106         if(topsort()) puts("THESE WINDOWS ARE CLEAN");
    107         else puts("THESE WINDOWS ARE BROKEN");
    108     }
    109     return 0;
    110 }/*
    111 
    112 START
    113 1 2 3 3
    114 4 5 6 6
    115 7 8 9 9
    116 7 8 9 9
    117 END
    118 START
    119 1 1 3 3
    120 4 1 3 3
    121 7 7 9 9
    122 7 7 9 9
    123 END
    124 ENDOFINPUT
    125 
    126 */
  • 相关阅读:
    第01组 Alpha冲刺 总结
    第01组 Alpha冲刺 (6/6)
    小黄衫买家秀及获奖感言
    软工实践个人总结
    实验 7:OpenDaylight 实验——Python 中的 REST API 调用
    实验 6:OpenDaylight 实验——OpenDaylight 及 Postman 实现流表下发
    实验 5:OpenFlow 协议分析和 OpenDaylight 安装
    SDN实验 4:Open vSwitch 实验——Mininet 中使用 OVS 命令
    实验 3:Mininet 实验——测量路径的损耗率
    2020软件工程个人编程作业一:统计分析GitHub 的用户行为数据
  • 原文地址:https://www.cnblogs.com/general10/p/7228136.html
Copyright © 2020-2023  润新知