poj 2531 dfs
一做这题,才感觉我一直没有
真正的理解dfs,dfs其实就是一种枚举,一种靠递归,靠剪枝优化的枚举
而且能根据具体问题进行剪枝,和递归的条件,看来我还得更深刻地去理解一前的算法,这很重要
还有就是vis[]是否访问数组标识,其实就是一个区分,区分成两组,这是实质
#include <stdio.h> #include <string.h> #define node 25 int dividen[node]; int c[node][node]; int n,max; void dfs(int num,int t) { int i,data=t; dividen[num]=1; for(i=1;i<=n;i++) { if(!dividen[i]) data+=c[num][i]; else data-=c[num][i]; } if(data>max) max=data; for(i=num+1;i<=n;i++) { if(data>t) { dfs(i,data); dividen[i]=0; } } } int main() { int i,j; while(scanf("%d",&n)!=EOF){ for(i=1;i<=n;i++) for(j=1;j<=n;j++) scanf("%d",&c[i][j]); memset(dividen,0,sizeof(dividen)); max=0; dfs(1,0); printf("%d\n",max); } return 0; }