首页 > 代码库 > Uva 11520 填充正方形
Uva 11520 填充正方形
题目链接:https://vjudge.net/problem/UVA-11520
题意:
给定一个n*n的正方形,把剩下的格子中填满大写字母,任意两个相邻的格子字母不同,要求最后字典序最小;
分析:
第一想法回溯啊,当然是不对的,100个点回溯会死人的!
其实,可以发现,每个点不可能说,由于前面的决策,后来不能满足了,相邻的点有4个,我有26个英文字母。
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 const int maxn = 10 + 5; 6 int n; 7 char maps[maxn][maxn]; 8 9 10 int main()11 {12 int t;13 scanf("%d",&t);14 int kase = 1;15 while(t--) {16 scanf("%d",&n);17 for(int i=0;i<n;i++)18 scanf("%s",maps[i]);19 20 for(int i=0;i<n;i++) {21 for(int j=0;j<n;j++) {22 if(maps[i][j]==‘.‘) {23 for(char ch=‘A‘;ch<=‘Z‘;ch++) {24 bool ok = true;25 if(i>0&&maps[i-1][j]==ch) ok = false;26 if(i<n-1&&maps[i+1][j]==ch) ok = false;27 if(j>0&&maps[i][j-1]==ch) ok = false;28 if(j<n-1&&maps[i][j+1]==ch) ok = false;29 if(ok) {maps[i][j] = ch;break;}30 }31 }32 }33 }34 35 printf("Case %d:\n",kase++);36 for(int i=0;i<n;i++)37 printf("%s\n",maps[i]);38 39 }40 return 0;41 }
Uva 11520 填充正方形
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。