高斯约旦消元有一些写法似乎是厌氧的 包括题解区第一篇题解在内 开氧气第一个点会判错
for(int j=1;j<=n;j++)
{
if(j==i)continue;
double u=a[j][i]/a[i][i];
a[j][i]=0.0;
for(int k=i+1;k<=n+1;k++)
a[j][k]-=a[i][k]*u;
}
不开氧气是对的 但开氧气时
这一过程中当代码中 ai,k 被减为 0 时会出现奇怪的锅 我的本地 ide 调试时会出现变成 5点几的一个数
for(int j=i+1;j<=n+1;j++)a[i][j]/=a[i][i];
a[i][i]=1;
for(int j=1;j<=n;j++)
{
if(j==i)continue;
for(int k=i+1;k<=n+1;k++)a[j][k]-=a[j][i]*a[i][k];
}
这样形式的高斯约旦消元至少在题目现有数据下开氧气不会出现奇怪的锅 鉴于现在大型比赛都是开氧气的 所以建议高斯约旦消元不要按照第一种形式写