N×N 的网格中,填写一些特殊字符,分别是 !@#$%……&*(,他们之间的大小关系是 !<@<#<$<%<^<&<*<(。
要求用这些字符填满 N×N 的网格,每个网格的字母上下左右各不相同,同时要求网格元素尽可能的小。(有些网格可能已经预填字符)(大小比较,先行后列)
例如:2×2的网格中,

输入 N 组数据,输入 N,输入 N×N 网格。
输入描述
输入 T,代表T组数据。输入 N,输入 N×N 网格。
输出描述
输出 N 组 N×N 矩阵。
样例输入 1
2
3
...
...
...
3
...
!..
...
样例输出 1
!@!
@!@
!@!
@!@
!@!
@!@
#include<bits/stdc++.h>
using namespace std;
char str[10]="!@#$%^&*(";
char g[10][10];
int n,t;
int main(){
cin>>t;
while(t--){
//输入数组初始状态
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>g[i][j];
}
}
//遍历填充'.'的位置
for(int i=0;i<n;i++ ){
for(int j=0;j<n;j++){
if(g[i][j]=='.'){
for(int k=0;k<9;k++){ //枚举 ! @ ...
bool ok=true;
if(i>0&&g[i-1][j]==str[k]) ok=false;
if(i<n-1&&g[i+1][j]==str[k]) ok=false;
if(j>0&&g[i][j-1]==str[k]) ok=false;
if(j<n-1&&g[i][j-1]==str[k]) ok=false;
if(ok){
g[i][j]=str[k];
break;
}
}
}
}
}
//输出结果
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<g[i][j];
}
cout<<endl;
}
}
return 0;
}

1万+

被折叠的 条评论
为什么被折叠?



