zoukankan      html  css  js  c++  java
  • 递归DFS中不该变的量,无意中变了!!

    题目:HDU 2464 A Pair of Graph 

    代码:

    View Code
    #include <stdio.h>
    #include <string.h>

    int A[10][10],B[10][10];
    int vary[10];
    bool flag[10];

    int small1,small2,min;

    void action(int n)
    {
    int i,j,val=0;

    for(i=0;i<n;i++)
    {
    for(j=0;j<n;j++)
    {
    if(A[vary[i]][vary[j]]==B[i][j]) continue;
    if(A[vary[i]][vary[j]])
    val+=small2;
    else
    val+=small1;
    }
    }
    if(val<min) min=val;
    }

    void DFS(int pos,int n)
    {
    int i;
    if(pos==n) {action(n); return ; }

    for(i=0;i<n;i++)
    {
    if(flag[i])
    {
    vary[pos]=i;
    flag[i]=false;
    DFS(pos+1,n);
    // 原来->DFS(++pos,n);考,给力!递归中pos的值再回溯时,pos的值就变了...
    // 狂汗!!
    flag[i]=true;
    }
    }
    }

    void solve()
    {
    int n,Ma,Mb,Ia,Ib,Da,Db;
    int i,a,b,cas=0;

    while(scanf("%d %d %d",&n,&Ma,&Mb) && n)
    {
    scanf("%d %d %d %d",&Ia,&Ib,&Da,&Db);
    small1=(Ia<Db?Ia:Db);
    small2=(Ib<Da?Ib:Da);
    min=0xfffffff;

    memset(A,0,sizeof(A));
    memset(B,0,sizeof(B));
    for(i=0;i<Ma;i++)
    {
    scanf("%d %d",&a,&b);
    A[a][b]=A[b][a]=1;
    }
    for(i=0;i<Mb;i++)
    {
    scanf("%d %d",&a,&b);
    B[a][b]=B[b][a]=1;
    }
    scanf("\n");
    for(i=0;i<n;i++) flag[i]=true;

    DFS(0,n);

    printf("Case #%d: %d\n",++cas,min/2);
    }
    }

    int main()
    {
    solve();
    return 0;
    }

    我要记录这一刻:

    View Code
    void DFS(int pos,int n)
    {
    int i;
    if(pos==n) {action(n); return ; }

    for(i=0;i<n;i++)
    {
    if(flag[i])
    {
    vary[pos]=i;
    flag[i]=false;
    DFS(++pos,n); //!!!!!!
    flag[i]=true;
    }
    }
    }

    这个错了,又是找了很长时间!汗死!!!

    代码中 DFS(++pos,n); 当回溯是pos的值就变了不是原来的位置了,当然错了!!!


    启发:写递归是要特别注意,不变的量,一定不要进行自加操作!!不是特意的就尽量不要用++!!

  • 相关阅读:
    路由配置系统(views)
    Django-MTV简介
    web框架
    APScheduler
    python单例模式
    mysql_istall_db
    mysql多线程写入出现脏数据(重复数据)问题?
    南方周末 【1999年新年献词】总有一种力量让我们泪流满面
    卡特兰树通向证明
    可持久化线段树(主席树)快速简洁教程 图文并茂 保证学会。kth number例题
  • 原文地址:https://www.cnblogs.com/fornever/p/2240196.html
Copyright © 2011-2022 走看看