八皇后問題的實現

2021-07-04 22:31:55 字數 1466 閱讀 5496

八皇后問題的實現

遞迴方法實現八皇后問題的**:

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>=0&&k < 8;i--,k++) }

//判斷右下方

for( i = row, k = j; i < 8 &&k < 8;i++,k++) }

//判斷左下方

for( i = row, k = j; i < 8&&k>=0;i++,k--) }

if(flag1||flag2||flag3)

else }

/*引數說明:

row:表示從第幾行開始

col:每行的列數

int(*chess)[8]:行指標 二維指標

*/void eightqueen(int row,int col,int(*chess)[8])

} if(row ==8)

printf("\n");

} printf("\n");

count++;

} else

*(*(chess1+row)+ i) = 1;

eightqueen(row + 1,col,chess1);

}} }

}int main()

} eightqueen(0,8,chess);

return 0;

}

回溯法實現八皇后問題的**:

#include #include #include #define queen 8     //皇后的數目

#define initial -10000 //棋盤的初始值

int a[queen]; //一維陣列表示棋盤

void init() //對棋盤進行初始化

} int valid(int row, int col) //判斷第row行第col列是否可以放置皇后

return 1;

} void print() //列印輸出n皇后的一組解

printf("\n");

} printf("\n");

}void queen() //n皇后程式

else

}if(a[i] == initial) //第i行沒有找到可以放置皇后的位置

}if (i == queen - 1) //最後一行找到了乙個皇后位置,說明找到乙個結果,列印出來

++i; //繼續探測下一行的皇后位置 }}

int main(void)

八皇后 N皇后問題 遞迴實現

八皇后問題,即在乙個棋盤上,每行都可以放置乙個皇后,但每個皇后都不能影響其他皇后的安全,即所有皇后的位置不能在同一直線上 解決問題方法及思想 遞迴 在使用遞迴之前首先要準備好兩個函式實現 1.判斷此時此刻位置是否安全 只需要判斷元素上方,左上方,右上方是否安全,且只要有乙個位置不安全,則結束判斷 2...

八皇后問題 c 實現

using system using system.collections.generic using system.text namespace eightqueen static int n 8 static char board new char n,n private static int ...

八皇后問題(遞迴實現)

八皇后問題,是乙個古老而著名的問題,是回溯 的典型案例。該問題是國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8x8格的西洋棋 上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。這裡用遞迴演算法實現,因為遞迴在某個層面上就實現了回溯,再演算法中,...