欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

C語言基于回溯算法解決八皇后問題的方法

來源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語言|點(diǎn)擊: 次

本文實(shí)例講述了C語言基于回溯算法解決八皇后問題的方法。分享給大家供大家參考,具體如下:

問題描述:

八皇后問題,是一個(gè)古老而著名的問題,是回溯算法的典型案例:在8X8格的國際象棋棋盤上擺放八個(gè)皇后,使其不能互相攻擊,即任意兩個(gè)皇后都不能處于同一行、同一列或同一斜線上,問有多少種擺法。

問題求解:

采用回溯算法,即從第一行開始,依次探查可以放置皇后的位置,若找到,則放置皇后,開始探查下一行;若該行沒有位置可以放置皇后,則回溯至上一行,清除該行放置皇后的信息,從該行原本放置皇后的下一個(gè)位置開始探查可以放置皇后的位置。求所有解時(shí),每找到一組解,就清除這一組解最后一個(gè)皇后的位置信息,開始探查該行另外一個(gè)可以放置皇后的位置,依次回溯求解。

存儲(chǔ)結(jié)構(gòu):

一維數(shù)組:col[8]:存放第i列有無皇后的標(biāo)記信息
一維數(shù)組:left[15]:存放每一條左斜線上的有無皇后的標(biāo)記信息
一維數(shù)組:right[15]:存放每一條右直線上有無皇后的標(biāo)記信息
一維數(shù)組:Q[8]:存放第i行的皇后的列下標(biāo)

代碼實(shí)現(xiàn):

#include<stdio.h>
#define N 8
int col[N] = { 0 };
int right[2 * N - 1] = { 0 };
int left[2 * N - 1] = { 0 };
int Q[N];
int cnt = 0;
void Print()
{
  int i;
  for (i = 0; i < N; i++)
  {
    for (int j = 0; j < N; j++)
    {
      if (Q[i] == j)
        printf("■");
      else
        printf("□");
    }
    printf("\n");
  }
  printf("==========================\n");
  cnt++;
}
void Queen(int i)
{
  int j;
  for (j = 0; j < N; j++)
  {
    if ((!col[j]) && (!left[i + j]) && (!right[7 + i - j]))
    {
      Q[i] = j;//放皇后
      col[j] = 1;
      left[i + j] = 1;
      right[N - 1 + i - j] = 1;//已有皇后的標(biāo)記
      if (i < N - 1)
      {
        Queen(i + 1);
      }
      else
      {
        Print();
      }
      col[j] = 0;
      right[N - 1 + i - j] = 0;
      left[i + j] = 0;//清除標(biāo)記,查找下一組解
    }
  }
}
int main(void)
{
  Queen(0);
  printf("%d", cnt);
  getchar();
  return 0;
}

運(yùn)行結(jié)果:

一共92組解,前面結(jié)果略去。。

希望本文所述對(duì)大家C語言程序設(shè)計(jì)有所幫助。

上一篇:C語言實(shí)現(xiàn)linux網(wǎng)卡連接檢測(cè)的方法

欄    目:C語言

下一篇:C++判斷主機(jī)是否處于聯(lián)網(wǎng)狀態(tài)

本文標(biāo)題:C語言基于回溯算法解決八皇后問題的方法

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/757.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有