#define N 8 int notsameline(int i1,int j1,int i2,int j2) { if(i1==i2||j1==j2||j2-j1==i2-i1||i1+j1==i2+j2) return 0; else return 1; }
void culi_stack(int a[]) { int top=1,i=0,j=0; a[0]=0; while(top<N) {for(i=0;i<top,j<N;i++) {if(notsameline(i,a[i],top,j)); else break;} /*不在同一条直线上*/ if(i==top) {a[top]=j;j=0;top++;} /*跟全部栈内元素都不在同一条线上*/ else if(j<N) j++; /*当前列不能放,换其它列*/ else {top--; /*所有列都不能放时,出栈*/ if(top==0) {a[0]++;j=0;top++;} /*出栈后的栈顶元素是第一行时,第一行元素加1进栈*/ else j=a[top]+1; /*不是第一行,该行元素加1试*/ } } }
main() {int a[N]; int i=0; culi_stack(a); for(i=0;i<N;i++) printf(" (%d,%d)",i,a[i]); printf("\n"); }
[此贴子已经被作者于2004-11-07 12:09:08编辑过]