我可不能告诉你我被这篇题解坑了一个多小时
#include<bits/stdc++.h>
using namespace std;
const int N=10;
string s[N];
int a[N][200],m,n;
bool b[N];
void dfs(int now,int x)
{
if(x==n)
{
cout<<"Yes";
exit(0);
}
for(int i=1;i<=n;i++)
{
if(!b[i])
{
int sum=0;
for(int j=0;j<=100;j++)
{
sum+=abs(a[now][j]-a[i][j]);
}
if(sum==2)
{
b[i]=1;
dfs(i,x+1);
b[i]=0;
}
}
}
return;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>s[i];
}
for(int i=1;i<=n;i++)
{
for(int j=0;j<m;j++)
{
a[i][s[i][j]-'a']++;
}
}
for(int i=1;i<=n;i++)
{
b[i]=1;
dfs(i,1);
b[i]=0;
}
cout<<"No";
return 0;
}
这篇题解用的是存储字母个数的方法,可以换一种方法 (主要是因为这么写过不了,其实我也不知道为啥,每一行代码看起来都很对(◎﹏◎)),例如将字符串更改顺序,使得后一个字符串能由前一个字符串只改变一个字母而得到
SO……
谁来给蒟蒻解释一下这是为啥
蒟蒻个人见解,大佬不喜勿喷!感谢合作!