WA45:
#include <bits/stdc++.h>
using namespace std;
const string s = “snuke”;
int n,m,nn,nm;
char a[505][505];
bool flag = true;
bool vis[505][505] = {0};
int x[4] = {1,0,0,-1},y[4] = {0,1,-1,0};
void dfs(int h,int l,int deep)
{
vis[h][l] = true;
if(flag == 0)
return;
if(a[h][l]!=s[deep%5])
return ;
if(h==n && l==m)
flag = 0;
for(int i = 0;i < 4;i++)
{
int nx = h+x[i],ny = l+y[i];
if(vis[nx][ny]==false&&nx>0&&nx<=n&&ny>0&&ny<=m)
{
dfs(nx,ny,deep+1);
}
if(flag == 0)
return;
}
}
int main()
{
cin>>n>>m;
for(int i = 1;i <= n;i++)
for(int j = 1;j <= m;j++)
cin>>a[i][j];
dfs(1,1,0);
if(flag)
cout<<“No”;
else
cout<<“Yes”;
return 0;
}
TLE75:
#include <bits/stdc++.h>
using namespace std;
const string s = “snuke”;
int n,m,nn,nm;
char a[1005][1005];
bool flag = true;
bool vis[1005][1005] = {0};
int x[4] = {1,-1,0,0},y[4] = {0,0,1,-1};
void dfs(int h,int l,int deep)
{
if(flag == 0)
return;
if(a[h][l]!=s[deep%5])
return ;
if(h==n && l==m)
flag = 0;
for(int i = 0;i < 4;i++)
{
int nx = h+x[i],ny = l+y[i];
if(vis[nx][ny]==false&&nx>0&&nx<=n&&ny>0&&ny<=m)
{
vis[nx][ny] = true;
dfs(nx,ny,deep+1);
vis[nx][ny] = false;
}
if(flag == 0)
return;
}
}
int main()
{
cin>>n>>m;
for(int i = 1;i <= n;i++)
for(int j = 1;j <= m;j++)
cin>>a[i][j];
vis[1][1] = true;
dfs(1,1,0);
if(flag)
cout<<“No”;
else
cout<<“Yes”;
return 0;
}
I need a big old