for(i=0;i<n;i++){
for(j=P[i];j<n;j++){
if( check(i,j,Q,n)==0){
Q[i][j]=1;
P[i]=j;
break;
}
}
while( j==n ){
P[i]=0;
j=P[--i];
Q[i][j]=0;
P[i]++;
i--;
}
}

でいいんぢゃねの?