DFS,从a[1][1]开始,visited[1][1]是0,则填满八个方向,继续搜索,还要回溯,恢复初始状态,便于搜索没选的。 参考代码 #include <iostream> #include <stdio.h> #include <string.h> using namespace std; int N,M; int a[9][9],visited[9][9]; int dx[9]={0,-1,-1,-1,1,1,1,0,0};...
}dfs(x,y+1);//默认选不起这个所以我们不选这个if(vis[x][y]==0)//瞥一眼发现可以选欸{ sum+=a[x][y];//选出来for(LL i=0;i<8;i++)//标记一下四周已经不能再被选了++vis[x+dx[i]][y+dy[i]];dfs(x,y+1);//接着往下寻找可选的地方for(LL i=0;i<8;i++) --vis[x+dx[...
解题分析: 此题正常做法应该用状压dp,或者是网络流来做,但是由于此题数据太小,所以也可以用dfs来做,但是要注意一点的时候,标记当前点周围8个点不能取的时候,用的是++而不是==1,因为可能同时有好几个点的作用域都包含这个点,同样,回溯的时候,vis的数组也只能用--。 AC代码 #include<cstdio>#include<cstring...