C语言描述回溯问题~~

来源:百度知道 编辑:UC知道 时间:2024/06/08 23:07:50
谁能用C写一份回溯求八皇后问题的程序~越详细越好~我初学C语言不久~对回溯仅仅是皮毛理解~先谢谢大家了(本人递归不是很好)
PS:不要用网上那些乱七八糟的东西回答,那些我都看过了,最好是原创,让我明白如何用回溯就行~
比如八皇后,用一个二维数组存放arr[i][j],就是用j++来一个一个的进行试探,成功则i++,否则i--,但我不知道如何用C语言实现这个

你先说说你的理解程度吧,你觉得回溯是什么?怎么回溯的?

不明白的话下个代码,自己调试一下,跟踪一下程序的运行。

-----------------------------------------------------
下面的代码只求了一个解:
#include <stdio.h>
int a[8]={0};
int check(int n)
{
int i;
for(i=0;i<n;i++)
{
if(a[n]==a[i]) return 0;
if(a[n]-a[i] == n-i) return 0;
if(a[n]-a[i] == i-n) return 0;
}
return 1;
}

void print(int n)
{
int i;
printf("\n");
for(i=0;i<n;i++)
{
printf("%d ", a[i]+1);
}
}

void main()
{
int i=0;
while(i<8)
{
while(a[i]<8 && !check(i)) a[i]++;/*找到合适的位置*/
if(a[i]>=8) /* 没有合适位置:回溯 */
{
a[i--]=0;
a[i]++; /* 调整前一个皇后位置 */
continue;
}