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

int a[7][2];
int t[6][2];
int e1,e2,x1,x2;
int n;
int min = 0x7fffffff;
int atime = 0;
int ttime = 0;

typedef struct {
    int x;
    int y;
}TR;

TR r[100];
int top = 0;

TR s[100];
int top1 = 0;

void dfs(int cur,int x)
{
    if ( cur == n + 1 )
    {
        int tot = atime + ttime;
        if ( tot < min )
        {
            min = tot;
            top1 = top;
            for (int j = 0; j < top; j++)
                s[j] = r[j];
        }
        return;
    }
    if ( cur == 0 )
    {
        ttime += e1;
        dfs(1,0);
        ttime -= e1;

        ttime += e2;
        dfs(1,1);
        ttime -= e2;
    }
    if ( cur == n && x == 0 )
    {
        atime += a[cur][x];
        ttime += x1;
        r[top].x = cur;
        r[top].y = x;
        top++;
        dfs(cur + 1, 0);
        top--;
        ttime -= x1;
        atime -= a[cur][x];
    }
    if ( cur == n && x == 1 )
    {
        atime += a[cur][x];
        ttime += x2;
        r[top].x = cur;
        r[top].y = x;
        top++;
        dfs(cur + 1, 0);
        top--;
        ttime -= x2;
        atime -= a[cur][x];
    }

    if ( cur >= 1 && cur <= n - 1 )
    {
        atime += a[cur][x];
        r[top].x = cur;
        r[top].y = x;
        top++;
        dfs(cur + 1, x);
        top--;
        atime -= a[cur][x];

        atime += a[cur][x];
        ttime += t[cur][1 - x];
        r[top].x = cur;
        r[top].y = x;
        top++;
        dfs(cur + 1, 1 - x);
        top--;
        ttime -= t[cur][1 - x];
        atime -= a[cur][x];
    }
}

int main()
{
    n = 6;
    e1 = 2;
    e2 = 4;
    x1 = 3;
    x2 = 2;

    a[1][0] = 7;    a[1][1] = 8;
    a[2][0] = 9;    a[2][1] = 5;
    a[3][0] = 3;    a[3][1] = 6;
    a[4][0] = 4;    a[4][1] = 4;
    a[5][0] = 8;    a[5][1] = 5;
    a[6][0] = 4;    a[6][1] = 7;

    t[1][1] = 2;    t[1][0] = 2;
    t[2][1] = 3;    t[2][0] = 1;
    t[3][1] = 1;    t[3][0] = 2;
    t[4][1] = 3;    t[4][0] = 2;
    t[5][1] = 4;    t[5][0] = 1;

    dfs(0,0);

    printf("The ans = %d\n",min);
    printf("The trace is :\n");
    for (int i = 0; i < top1; i++)
        printf("(%d,%d) ",s[i].x,s[i].y);
    printf("\n");
    
    return 0;
}

 

posted on 2013-03-20 21:43  Sinker  阅读(161)  评论(0编辑  收藏  举报