Aby macierz była nieosobliwa(wyznacznik różny od zera) nie może posiadać na swojej przekątnej żadnego zera, mam pewne dane (poniżej zamieszczone w kodzie). Problem polega na tym aby wiersze w tej macierzy tak pozamieniać aby na przekątnej były same "jedynki" przy czym nie można zmieniać kolejności kolumn. Napisałem algorytm który działa tylko w pewnych przypadkach a z zamieszczonym poniżej ma problem. Może ktoś pomoże mi to rozwiązać ? Z góry dziękuję za pomoc.
#include <stdio.h>
#include <conio.h>
void zamien(int co, int czym);
float A[100][100];
float temp[100];
int n, max, tup;
int i, j;
void main()
{
n=8; //rozmiar macierzy 8x8
// Wprowadzenie danych
A[0][0]=1;
A[1][0]=1;
A[1][3]=1;
A[2][0]=1;
A[2][7]=1;
A[3][1]=1;
A[3][4]=1;
A[4][1]=1;
A[4][5]=1;
A[5][2]=1;
A[5][5]=1;
A[6][2]=1;
A[6][6]=1;
A[7][2]=1;
A[7][7]=1;
A[0][8]=0;
A[1][8]=1;
A[2][8]=2;
A[3][8]=3;
A[4][8]=4;
A[5][8]=5;
A[6][8]=6;
//wyśiwetlenie zawartości macierzy
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
printf("%.1f \t", A[i][j]);
}
printf("\n");
}
printf("\n\n\n");
//tutaj zamiana wierszy miejscami
for(i=0; i<n; i++)
{
if(A[i][i]==0)
{
max=i;
tup=A[i][i];
for(j=0; j<n; j++)
{
if(A[j][i]>tup)
{
max=j;
tup=A[j][i];
}
}
if(max==i)
{
printf("Stop!");
return;
}
else
{
for(u=0; u<n; u++)
temp[u]=A[max][u];
for(u=0; u<n; u++)
A[max][u]=A[i][u];
for(u=0; u<n; u++)
A[i][u]=temp[u];
}
}
}
//wyświetlenie wyników po sortowaniu
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
printf("%.1f \t", A[i][j]);
}
printf("\n");
}
for(i=0; i<n; i++)
{
if (A[i][i] == 0)
{
printf("Wartosci na przekatnej musza byc rozne od 0\n");
getch();
return;
}
}
getch();
return;
}
Program dla tych danych, czyli macierz(8x8) o postaci:
1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
1.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0
1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0
0.0 1.0 0.0 0.0 1.0 0.0 0.0 0.0
0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0
0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0
0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0
0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0
daje wyniki następujące:
1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0
0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0
1.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0
0.0 1.0 0.0 0.0 1.0 0.0 0.0 0.0
0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0
0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0
0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0
W drugim wierszu w drugiej kolumnie znajduje się zero. Czyli wyniki są nie do przyjęcia ponieważ nie może być na przekątnej "zera"!
Dla dla innych danych działa, np. proszę wrzucić takie dane:
n=7;
A[0][2]=1;
A[1][4]=1;
A[2][0]=1;
A[2][3]=1;
A[3][0]=1;
A[3][4]=1;
A[4][1]=1;
A[4][4]=1;
A[5][1]=1;
A[5][5]=1;
A[6][1]=1;
A[6][6]=1;
Dla tych danych czyli dla macierzy(7x7):
0.0 0.0 1.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 1.0 0.0 0.0
1.0 0.0 0.0 1.0 0.0 0.0 0.0
1.0 0.0 0.0 0.0 1.0 0.0 0.0
0.0 1.0 0.0 0.0 1.0 0.0 0.0
0.0 1.0 0.0 0.0 0.0 1.0 0.0
0.0 1.0 0.0 0.0 0.0 0.0 1.0
wyniki sortowania wyglądają tak:
1.0 0.0 0.0 0.0 1.0 0.0 0.0
0.0 1.0 0.0 0.0 1.0 0.0 0.0
0.0 0.0 1.0 0.0 0.0 0.0 0.0
1.0 0.0 0.0 1.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 1.0 0.0 0.0
0.0 1.0 0.0 0.0 0.0 1.0 0.0
0.0 1.0 0.0 0.0 0.0 0.0 1.0