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;
}

浙公网安备 33010602011771号