|
|
最近用C++递归形式实现了8皇后问题,可能效率有点低
#include <iostream> using namespace std;int count=0;void placeQueen(int m,int flag[8][8],char chess[8][8]){ int j; for(j=0;j<8;j++)if(flag[m][j]==0){ int ii,jj; char c[8][8]; int f[8][8]; for(ii=0;ii<8;ii++) for(jj=0;jj<8;jj++) { c[ii][jj]=chess[ii][jj]; f[ii][jj]=flag[ii][jj]; } for(ii=0;ii<8;ii++) for(jj=0;jj<8;jj++) { if(f[ii][jj]==0 && (ii+jj==m+j || m==ii || j==jj || m-j==ii-jj)) f[ii][jj]=-1; } c[m][j]='#'; f[m][j]=1; if(m==7){ cout<<++count<<endl;for(ii=0;ii<8;ii++) {for(jj=0;jj<8;jj++){cout<<c[ii][jj]<<" ";}cout<<endl;} cout<<endl;cout<<endl;return;}elseplaceQueen(m+1,f,c);}//if(j==8)return; } void main() { char c[8][8]; int f[8][8]; int i,j; for(i=0;i<8;i++) for(j=0;j<8;j++) { f[i][j]=0; c[i][j]='*'; } // for(i=0;i<8;i++) placeQueen(0,f,c); } |
|