谁懂我逐渐崩溃的心态
第一遍写后不对,看题解发现不用回溯
第二遍开始样例过了,但就是10分
题目
#include<bits/stdc++.h>
using namespace std;
int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
char a[1001][1001];
bool v[1001][1001];
map<string,int>in;
int cnt,n,m;
void dfs(int x,int y,string &s)
{
for(int i=0;i<4;i++)
{
int xx=dx[i]+x,yy=dy[i]+y;
if(v[xx][yy]==0&&a[xx][yy]==a[x][y]&&xx>0&&xx<=n&&yy>0&&yy<=m)
{
s+=char(i+'0');
v[xx][yy]=1;
dfs(xx,yy,s);
//v[xx][yy]=0;
}
}
s+=' ';
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin>>a[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
if(v[i][j]==0)
{
string s="";
v[i][j]=1;
dfs(i,j,s);
if(in[s]==0)
{
cnt++;
cout<<s<<"\n";
}
in[s]=1;
}
}
cout<<cnt;
return 0;
}