N-Queen
Posted: 2007年4月28日(土) 09:36
#include <stdio.h> #define N 20 void print_queens(int Q[N][N],int n) { int i,j; for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(Q[j]==1) printf("1"); else if(Q[j]==0) printf("0"); } printf("\n"); } } int check(int i,int j,int Q[N][N], int n){ int I,J; int sum=0; /*yoko*/ for(J=0;J<n;J++) if(Q[J]==1 && J!=j) sum++; /*tate*/ for(I=0;I<n;I++) if(Q[j]==1 && I!=i) sum++; /*naname*/ for(I=0;I<n;I++ ){ for(J=0;J<n;J++){ if(i+j==I+J && Q[J]==1 && J!=j && I!=i) sum++; } } for(I=0;I<n;I++ ){ for(J=0;J<n;J++){ if(i-j==I-J && Q[J]==1 && J!=j && I!=i) sum++; } } return (sum); } int success(int Q[N][N],int n){ int done=0; int i,j; for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(check(i,j,Q,n)>0 && Q[j]) done==1; } } return(done); } int main(void){ int Q[N][N], P[N],n; int kensaku=1,flag; int i,j,I,J,a; printf("クイーンの数を入力しなさい\n"); scanf("%d",&n); for(i=0;i<n;i++){ for(j=0;j<n;j++){ Q[j]=0; P=0; } } for(i=0;i<n;i++){ for(j=P;j<n;j++){ if( check(i,j,Q,n)==0){ Q[i][j]=1; P[i]=j; while( flag==1 ){ kensaku++; flag=0; }break; } } while( j==n ){ P[i]=0; j=P[--i]; Q[i][j]=0; P[i]++; i--; flag=1;} } if(success(Q,n)==1);{ print_queens(Q,n); printf("kaisu:%d\n",kensaku); } return(0); }
----------------------------------------------------------------------------------------------------
実際にこのプログラムで正常に結果は出るのですが、main文の中の二番目のwhile文のi++がプログラムの中でどのような意味を持つのかを教えてほしいです。
これだけがどうしてもわからず悩んでいます。
わかる方がいれば解答お願いします。