zoukankan      html  css  js  c++  java
  • UVA11520填充正方形

    题意:
         给你一个n*n的矩阵,让你往里面添加大写字母,矩阵有的字母已经给填好了,然后要求是每个格子都不能与他相邻的格子的大写字母相同,如果有多个答案,输出从上到下,从左到右所连接的成的那个n*n长度的字符串的ASCII码最小。


    思路:
          大家都知道4色定理吧,四种颜色能把任何地图都画出来,并且相邻的颜色不同,那么这个题目是26种,所以肯定不存在没有解的情况,所以我们只要从上到下,从左到右依次填写字母,已经填写好的就不用填写了,没有填写好的就填上能填的最小的那个字母。


    #include<stdio.h>


    char map[12][12];


    int main ()
    {
        int t ,cas = 1 ,i ,j ,n;
        scanf("%d" ,&t);
        while(t--)
        {
           scanf("%d" ,&n);
           for(i = 1 ;i <= n ;i ++)
           scanf("%s" ,map[i] + 1);
           for(i = 1 ;i <= n ;i ++)
           for(j = 1 ;j <= n ;j ++)
           {
               if(map[i][j] != '.') continue;
               for(int k = 'A' ;k <= 'Z' ;k ++)
               {
                  int mk = 0;
                  if(i >= 2 && map[i-1][j] == k) mk = 1;
                  if(j >= 2 && map[i][j-1] == k) mk = 1;
                  if(i <= n - 1 && map[i+1][j] == k) mk = 1;
                  if(j <= n - 1 && map[i][j+1] == k) mk = 1;
                  if(!mk)
                  {
                      map[i][j] = k;
                      break;
                  }
               }
           }
           printf("Case %d: " ,cas ++);
           for(i = 1 ;i <= n ;i ++)
           puts(map[i]+1);
        }
        return 0;
    }
           



  • 相关阅读:
    Poj 1742 Coins(多重背包)
    Poj 2350 Above Average(精度控制)
    求二进制数中1的个数
    Poj 1659 Distance on Chessboard(国际象棋的走子规则)
    Poj 2411 Mondriaan's Dream(压缩矩阵DP)
    Poj 2136 Vertical Histogram(打印垂直直方图)
    Poj 1401 Factorial(计算N!尾数0的个数——质因数分解)
    poj 2390 Bank Interest(计算本利和)
    Poj 2533 Longest Ordered Subsequence(LIS)
    Poj 1887 Testing the CATCHER(LIS)
  • 原文地址:https://www.cnblogs.com/csnd/p/12062547.html
Copyright © 2011-2022 走看看