我在高斯消元部分的代码
for(int k=1,t=1; k<=m; k++) {
if(t==n+1) break;
int u=t; //这里
for(int i=t+1; i<=n; i++) if((fabs(a[i][k])>1e-4)&&(w[u]>w[i])) u=i;
if(fabs(a[u][k])<1e-4) continue;//到这里
swap(a[t],a[u]);
swap(w[t],w[u]);
ans+=w[t];
for(int i=1; i<=n; i++) {
if(i==t) continue;
double bs=a[i][k]/a[t][k];
for(int j=n; j>=k; j--) a[i][j]-=a[t][j]*bs;
}
t++,cnt++;
}
在寻找主元部分出现错误(只有30分)
改成这样就ac了
int u=0;
for(int i=t; i<=n; i++) if((fabs(a[i][k])>1e-4)&&((!u)||w[u]>w[i])) u=i;
if(!u) continue;
为什么不能把初始主元设成t呢