題目連結:
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=456&page=show_problem&problem=2515
題目大意:
給一個矩陣,要求在上面填上A到Z的字母,使得每個格子的字母與其相鄰格子的字母不同。
思路:
直接按照從左至右,從上到下的順序,一個格子一個格子地填。每個格子從A~Z枚舉,看哪個符合條件就填上。然後直接輸出即可。
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn = 12;char map[maxn][maxn];int n;char fill(int row, int col){ for(int ch='A'; ch<='Z'; ++ch){ if(ch != map[row][col-1] && ch != map[row][col+1] && ch != map[row+1][col] && ch != map[row-1][col] ) return ch; }}void solve(){ for(int i=1; i<=n; ++i) for(int j=1; j<=n; ++j) if(map[i][j] == '.') map[i][j] = fill(i,j); for(int i=1; i<=n; ++i) puts(map[i]+1);}int main(){ int T, cas=1; scanf("%d", &T); while(T--){ printf("Case %d:\n", cas++); scanf("%d", &n); memset(map, 0, sizeof(map)); for(int i=1; i<=n; ++i) scanf("%s", map[i]+1); solve(); }return 0;}