#include <bits/stdc++.h>
using namespace std;
int t,n;
string s[155][155];
vector G[155155];
int pair_1[155155], pair_2[155155];
bool visited[155155];
bool dfs(int u){
if (!u) return 1;
for(int i=0;i<G[u].size();i++){
int v = G[u][i];
if (!visited[v]){
visited[v] = 1;
if (dfs(pair_2[v])){
pair_1[u] = v;
pair_2[v] = u;
return 1;
}
}
}
return 0;
}
int main(){
iostream::sync_with_stdio(0);
cin >> t;
while(t--){
for(int i=1;i<155155;i++) G[i].clear(),pair_1[i] = pair_2[i] = 0;
cin >> n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin >> s[i][j];
int u = (i - 1) * n + j;
for(int k=0;k<s[i][j].size();k++){
if (s[i][j][k] == 'U' && i > 1)
G[u].push_back(u - n);
if (s[i][j][k] == 'L' && j > 1)
G[u].push_back(u - 1);
if (s[i][j][k] == 'D' && i < n)
G[u].push_back(u + n);
if (s[i][j][k] == 'R' && j < n)
G[u].push_back(u + 1);
}
}
}
int cnt = 0, ahi = -1;
while(cnt < nn && cnt != ahi){
ahi = cnt;
fill(visited+1,visited+nn+1,0);
for(int i=1;i<=nn;i++){
if (!pair_1[i] && dfs(i))
cnt++;
}
}
if (cnt != n*n) cout << "NO" << endl;
else{
cout << "YES" << endl;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
int u = (i-1) * n + j;
if (u - pair_1[u] == -1) cout << "R ";
if (u - pair_1[u] == 1) cout << "L ";
if (u - pair_1[u] == -n) cout << "D ";
if (u - pair_1[u] == n) cout << "U ";
} cout << endl;
}
}
}
}
别的还好说,string s[155][155]改为 char s[155][155][20]就可以,主要是vector G[155155];这个C没有,你到底用来存储什么的,可能要改成数组
不一样吗?c++如果不用class,跟c语言几乎一样,所不同只是版本语言特性
第一步:C++转汇编
第二部:汇编转C