一份错误的代码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; } }