UVa11520

来源:互联网 发布:windows svn 备份恢复 编辑:程序博客网 时间:2024/05/24 04:20

题目链接

简介:方格填字母,相邻的要求互异

分析:
题目要求输出字典序最小的方案,
实际上这就是在提示我们这道题的解法:
我们直接贪心的向方格里填数就好了
一开始我还以为要搜索,一道搜到一种合法方案就停止,实际上这就是贪心填数的过程

//这里写代码片#include<cstdio>#include<cstring>#include<iostream>using namespace std;int mp[20][20],n;void solve(){    int i,j,k;    for (i=1;i<=n;i++)        for (j=1;j<=n;j++)        {            if (mp[i][j]!=-1) continue;            bool ff;            for (k=0;k<26;k++)            {                ff=1;                if (i>1&&mp[i-1][j]==k) ff=0;                if (j>1&&mp[i][j-1]==k) ff=0;                if (i<n&&mp[i+1][j]==k) ff=0;                if (j<n&&mp[i][j+1]==k) ff=0;                if (ff)                {                    mp[i][j]=k;                    break;                }            }        }}int main(){    int T;    scanf("%d",&T);    for (int cas=1;cas<=T;cas++)    {        scanf("%d",&n);        char s;        for (int i=1;i<=n;i++)            for (int j=1;j<=n;j++)            {                cin>>s;                if (s=='.') mp[i][j]=-1;                else mp[i][j]=s-'A';            }        solve();        printf("Case %d:\n",cas);        for (int i=1;i<=n;i++)        {            for (int j=1;j<=n;j++)                printf("%c",mp[i][j]+'A');            printf("\n");        }    }    return 0;}
原创粉丝点击