八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯·貝瑟爾於2023年提出:在8×8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。 高斯認為有76種方案。2023年在柏林的象棋雜誌上不同的作者發表了40種不同的解,後來有人用圖論的方法解出92種結果。
這裡用遞迴實現:
#includeint count = 0;
int notdanger(int row,int j,int (*chess)[8])
} //判斷左上方
for(i=row,k=j;i>=0&&k>=0;i--,k--) }
//判斷右下方
for(i=row,k=j;i<8&&k<8;i++,k++) }
//判斷右上方
for(i=row,k=j;i>=0&&k<8;i--,k++) }
//判斷左下方
for(i=row,k=j;i<8&&k>=0;i++,k--) }
if(flag1||flag2||flag3||flag4||flag5)
else }
//row 表示起始行
//n表示列數
//(*chess)[8] 表示指向棋盤的每一行的指標
void eightqueen(int row,int n,int (*chess)[8])
} if(row== 8)
printf("\n");
} printf("\n\n");
count++;
} else
*(*(chess2+row)+j) =1;
eightqueen(row+1,n,chess2);
}} }
}int main()
; eightqueen(0,8,chess);
printf("總共有:%d種\n",count);
return 0;
}
資料結構 線性表 陣列實現
按照上述抽象描述,定義乙個模板類來描述上述的抽象描述。templateclass linearlist bool isempty const 判斷線性表是否為空 int length const 線性表長度 bool find int k,t x const 返回第k個元素到x中 int searc...
資料結構棧 線性表實現
棧的定義 棧是一種特殊的表這種表只在表頭進行插入和刪除操作。因此,表頭對於棧來說具有特殊的意義,稱為棧頂。相應地,表尾稱為棧底。不含任何元素的棧稱為空棧。而本次給大家介紹用線性表實現的棧。如圖 這裡介紹雙向鍊錶的常用操作 l 建立棧 l 銷毀棧 l 清空棧 l 壓棧 l 出棧 l 返回棧頂元素 l ...
基礎資料結構 線性表實現
以下 是對基礎資料結構中的線性表的順序實現,在vs2012下沒問題 include define maxlength 20 struct list 增加元素 int insert list l,int e,int index l.data index e l.length return 1 刪除元素...