rt.下面这一段东西加上就RE了
for (int i=-1;i<=1;i++)
{
for (int j=-1;j<=1;j++)
{
avail[x+i][y+j]=true;
}
}
dfs代码如下:
#include"bits/stdc++.h"
using namespace std;
int m,n,maxx;
int maps[9][9];
bool avail[9][9];
void dfs(int x,int y,int ans)
{
avail[x][y]=false;
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
if (avail[i][j])
{
dfs(i,j,ans);
}
}
}
for (int i=-1;i<=1;i++)
{
for (int j=-1;j<=1;j++)
{
avail[x+i][y+j]=false;
}
}
ans+=maps[x][y];
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
if (avail[i])
{
dfs(i,j,ans);
}
}
}
if (ans>maxx)
{
maxx=ans;
}
for (int i=-1;i<=1;i++)
{
for (int j=-1;j<=1;j++)
{
avail[x+i][y+j]=true;
}
}
avail[x][y]=false;
return;
}
int main()
{
int T;
scanf("%d",&T);
for (int i=1;i<=T;i++)
{
maxx=0;
memset(maps,0,sizeof(maps));
memset(avail,false,sizeof(avail));
scanf("%d%d",&n,&m);
for (int j=1;j<=n;j++)
{
for (int k=1;k<=m;k++)
{
avail[j][k]=true;
}
}
for (int j=1;j<=n;j++)
{
for (int k=1;k<=m;k++)
{
scanf("%d",&maps[j][k]);
}
}
dfs(1,1,0);
printf("%d",maxx);
printf("\r\n");
}
return 0;
}