馬踏棋盤(6*6時效率不可忍受,求教!)
阿新 • • 發佈:2019-01-29
#include<iostream> #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> using namespace std; int a[10][10]; int line,row; void deal(int c[10][10],int s1,int s2,int k); void deal2(int a[10][10]); int flag,much; FILE* p; int main() { int k,i,j; flag=0; cin>>line>>row; p=fopen("opq.txt","w"); for(i=0;i<line;i++){ for(j=0;j<row;j++){ k=0; deal(a,i,j,k); if(flag==0){ cout<<"wrong"<<endl; } printf("%d\n\n",much); } } fclose(p); return 0; } void deal(int c[10][10],int s1,int s2,int k) { int i,j; int b[10][10]; if(s1>=0&&s1<line&&s2>=0&&s2<row){ for(i=0;i<line;i++){ for(j=0;j<row;j++){ b[i][j]=c[i][j]; } } }else{ return; } if(b[s1][s2]==0){ k++; b[s1][s2]=k; if(k==(line)*(row)){ deal2(b); return; } deal(b,s1-1,s2-2,k); deal(b,s1-2,s2-1,k); deal(b,s1-2,s2+1,k); deal(b,s1-1,s2+2,k); deal(b,s1+1,s2+2,k); deal(b,s1+2,s2+1,k); deal(b,s1+2,s2-1,k); deal(b,s1+1,s2-2,k); } return; } void deal2(int b[10][10]) { int i,j; for(i=0;i<line;i++){ for(j=0;j<row;j++){ printf("%3d",b[i][j]); fprintf(p,"%3d",b[i][j]); } printf("\n"); fprintf(p,"\n"); } printf("\n\n"); fprintf(p,"\n\n"); much++; flag=1; }