luogu1123

 

一份错误的代码qaq,思路没问题,但是这个递归好像是回不去的

#include<bits/stdc++.h>
using namespace std;

int vis[10][10];
int a[10][10];

int dx[9]={0,0,0,1,1,1,-1,-1,-1};
int dy[9]={0,1,-1,0,1,-1,0,1,-1};

//来到一个点,
//如果是vis=0,就可以访问,cur加上这个点的值,并且下一步移动 
//如果不是,就重新回去 
int dfs(int n,int m,int x,int y,int cur)//x,行,n ;y,列,m 
{
    if(x<0||y<0||x>=n||y>=m||vis[x][y]) return cur;//这里有问题 
    cur+=a[x][y];
    for(int i=0;i<9;i++)
    {
        if(!(x+dx[i]<0||y+dy[i]<0||x+dx[i]>=n||y+dy[i]>=m))
        vis[x+dx[i]][y+dy[i]]=1;
    }
    for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
                return dfs(n,m,i,j,cur);
}

int main(){
    int t;
    cin>>t;

    for(int k=0;k<t;k++)
    {    
        int temp=0;
        int maxn=0;
        memset(a,0,sizeof(a));
        memset(vis,0,sizeof(vis));
        int n,m;//数字矩阵为N行M列。
        cin>>n>>m;
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
                cin>>a[i][j];
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++){
                memset(vis,0,sizeof(vis));
                if(a[i][j])
                temp=dfs(n,m,i,j,0);
                if(maxn<=temp) maxn=temp;
            }
        cout<<maxn<<endl;
    }

    
} 

 

posted on 2020-03-09 18:42  lyyyt  阅读(155)  评论(0编辑  收藏  举报