只有第七组WA了,于是我把第七组的输入和输出下载了,运行我的程序后,发现和正确输出如出一辙!?但是提交就是不能过??? 这是我的代码,求大佬帮忙看看QWQ(可能写的有点繁琐):
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
using namespace std;
const int N = 35;
char mp[N][N];
int n, m, sum, in[N], G[N][N];
bool vis[N], dfsed[N];
struct node {
int x, y;
};
bool cmp1(node x, node y) {
return x.x < y.x;
}
bool cmp2(node x, node y) {
return x.y < y.y;
}
void dfs(string s) {
if (s.size() == sum - 1) {
cout << s << endl;
return ;
}
for (int i = 0; i < 26; i++) {
if (in[i] == 0 && vis[i] && !dfsed[i]) {
for (int j = 0; j < 26; j++) if (G[i][j]) in[j]--;
dfsed[i] = true;
dfs(s + char('A' + i));
dfsed[i] = false;
for (int j = 0; j < 26; j++) if (G[i][j]) in[j]++;
}
}
}
int main() {
scanf("%d%d", &n, &m);
m++;
string s;
getline(cin, s);
for (int i = 1; i <= n; i++) {
getline(cin, s);
for (int j = 1; j <= m; j++) {
mp[i][j] = s[j - 1];
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
char ch = mp[i][j];
if (ch != '.' && !vis[ch - 'A']) {
sum++;
vis[ch - 'A'] = true;
vector<node> v1, v2;
for (int k = 1; k <= n; k++) {
for (int l = 1; l <= m; l++) {
if (mp[k][l] == ch) {
v1.push_back({k, l});
v2.push_back({k, l});
}
}
}
sort(v1.begin(), v1.end(), cmp1);
sort(v2.begin(), v2.end(), cmp2);
int minx = v1[0].x;
int maxx = v1[v1.size() - 1].x;
int miny = v2[0].y;
int maxy = v2[v2.size() - 1].y;
for (int k = minx; k <= maxx; k++) {
if (mp[k][miny] != '.' && mp[k][miny] != ch && !G[ch - 'A'][mp[k][miny] - 'A']) {
G[ch - 'A'][mp[k][miny] - 'A'] = true;
in[mp[k][miny] - 'A']++;
}
if (mp[k][maxy] != '.' && mp[k][maxy] != ch && !G[ch - 'A'][mp[k][maxy] - 'A']) {
G[ch - 'A'][mp[k][maxy] - 'A'] = true;
in[mp[k][maxy] - 'A']++;
}
}
for (int l = miny; l <= maxy; l++) {
if (mp[minx][l] != '.' && mp[minx][l] != ch && !G[ch - 'A'][mp[minx][l] - 'A']) {
G[ch - 'A'][mp[minx][l] - 'A'] = true;
in[mp[minx][l] - 'A']++;
}
if (mp[maxx][l] != '.' && mp[maxx][l] != ch && !G[ch - 'A'][mp[maxx][l] - 'A']) {
G[ch - 'A'][mp[maxx][l] - 'A'] = true;
in[mp[maxx][l] - 'A']++;
}
}
}
}
}
dfs("");
return 0;
}