9种基本算法_回溯

回溯思想:先按一条路径逐一枚举,当发现不是正确街时就退回去选择其他路径。


回溯步骤:1、定义问题的解空间

                  2、确定易于搜索的解空间结构

                  3、以深度优先方式搜索解空间,并在搜索过程中去除无效搜索


例如:八皇后

在8*8格的国际象棋盘上摆放8个皇后,使其不能相互攻击,即任意2个皇后不能在同一行同一列同一斜线上,问有多少种摆法


void print()//输出每一种情况下棋盘中皇后的摆放情况

{

    int outer;

    int inner;

    for(outer=0;outer<8;outer++)

    {

        for(inner=0;inner<gEightQueen[outer];inner++)

            cout<<"_";

         printf("*");

        for(inner=gEightQueen[outer]+1;inner<8;inner++)

            cout<<"_";

        cout<<endl;

    }

    cout<<"==========================\n";

}



int check_pos_valid(int loop , int value)

{

        int index;

        int data;

        

        for(index = 0 ; index < loop ; index++)

        {

            data = gEightQueen[index];

            if(value == data)

                return 0;

            if((index + data) == (loop + value))

                return 0;

            if((index - data) == (loop - value))

                return 0;

        }

        return 1;

    }


void eight_queen(int index)

{

    int loop;

    for(loop=0;loop<8;loop++)

    {

        if(check_pos_valid(index,loop))

        {

            gEightQueen[index]=loop;

            if(7==index)

            {

                gCount++;

                print();

                gEightQueen[index]=0;

                return;

            }

            eight_queen(index+1);

            gEightQueen[index]=0;

        }

    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值