精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>算法集锦--------梦入玄机>>八皇后问题算法>>八皇后问题的解(回溯法程序代码)

主题:八皇后问题的解(回溯法程序代码)
发信人: tabalulu@GZ()
整理人: yangcs(2002-01-14 18:36:29), 站内信件

标  题: 八皇后问题的解(回溯法程序代码)
发信站: 网易虚拟社区 (Fri Jul 14 10:06:52 2000), 站内信件

以前上学的时候,写8皇后程序的时候偷懒用最笨的算法,在8086上计算十皇后

的时候,我放了张纸条,说明计算机正在运行,然后去吃饭,吃完以后,才看到

结果。前几天,刚好有空,所以重写了一次,以补当年的遗憾。

#include "stdio.h"
int attacked(int *array,int position){
   int flag=-1;
   float step;
   if(position==1) return flag;
   for(step=1.00;step<position;step++){
if(*(array+(int)step)==*(array+position)||step==position) return
1;
if(((*(array+(int)step)-*(array+position))/(step-position))==1||((*
(array+(int)step)-*(array+position))/(step-position))==-1){
flag=1;
break;
}
}
return flag;
}
void main(void){
int countSum,queenSum,printCount,*queenArray,queenPosition=0;
int tempArray[20]={6666,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
countSum=1;
queenArray=tempArray;
printf("input you queenSum here:");
scanf("%d",&queenSum);
fflush(stdin);
if(queenSum<4){
printf("the %d queen's sum is 0\n",queenSum);
return;
}
for(;;){
if(countSum<queenSum){
if(countSum==1&&*(queenArray+countSum)==1) countSum++;
if(attacked(queenArray,countSum)==1){
if(*(queenArray+countSum)>=queenSum){
  if(*(queenArray+countSum-1)<queenSum){
++*(queenArray+(--countSum));
*(queenArray+countSum+1)=0;
}
else{
*(queenArray+countSum--)=0;
if(*(queenArray+countSum)<queenSum) ++*(queenArray+countSum);
else{
if(countSum==1&&*(queenArray+countSum)==queenSum) break;
*(queenArray+countSum--)=0;
++*(queenArray+countSum);
}
}
}
else
++*(queenArray+countSum);
}
else
++*(queenArray+(++countSum));
}
else{
if(attacked(queenArray,countSum)==1){
if(*(queenArray+countSum)>=queenSum){
   if(*(queenArray+countSum-1)<queenSum){
++*(queenArray+(--countSum));
*(queenArray+countSum+1)=0;
continue;
}
else{
*(queenArray+countSum--)=0;
if(*(queenArray+countSum)<queenSum) ++*(queenArray+countSum);
else{
*(queenArray+countSum--)=0;
++*(queenArray+countSum);
}
continue;
}
}
else {
++*(queenArray+countSum);
continue;
}
}
queenPosition++;
for(printCount=1;printCount<=queenSum;printCount++)
printf("%3d%",*(queenArray+printCount));
if(printCount>=queenSum) printf("\n");
   if(*(queenArray+countSum)>=queenSum){
      ++*(queenArray+(--countSum)); //the "++" priority is different
 from turbo C
  *(queenArray+countSum+1)=0;
   }
   ++*(queenArray+countSum);
 }
   }
   printf("the %d queen's sum is %d\n",queenSum,queenPosition);
}

--
谁能告诉我!!现在完成一件耗日持久的事后,不再象以前有轻松的感觉??

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.105.68.204]

[关闭][返回]