>一応正しい結果は出てます。
とりあえず以下3点、気になる事があるんだが
int success(int Q[N][N],int n)中の
 done==1;の==。
int main(void)中の
 P[i]=j;の次の行。
 if(success(Q,n)==1);{の;。

>i--を消したいのですが
goto使えば出来るんじゃない?
それかfor(i=0;i<n;i++)のi++を最後に書いてcontinueとか