добиться того, чтобы все нулевые элементы располагались на главной диагонали
Сама задача: С помощью перестановки строк матрицы добиться того, чтобы все нулевые элементы располагались на главной диагонали (дополнительных векторов и матриц не использовать)
исходник можно??? один или два массива с классами??? :)
Полностью задание: Дана квадратная матрица A, в каждой строке и каждом столбце которой содержится по одному нулевому элементу.С помощью перестановки строк матрицы добиться того, чтобы все нулевые элементы располагались на главной диагонали (дополнительных векторов и матриц не использовать)
Код:
using System;
public class Test
{
static void Swap(ref int a, ref int b) {
int t = a;
a = b;
b = t;
}
public static void Main()
{
const int N = 5;
int[,] A = new int[N,N] {
{ 1, 4, 0, 5, 7 },
{ 0, 3, 5, 2, 4 },
{ 1, 9, 9, 0, 3 },
{ 0, 8, 1, 5, 1 },
{ 4, 5, 0, 1, 3 }
};
Console.WriteLine("Исходная матрица:");
for(int r = 0; r < N; r++) {
for(int c = 0; c < N; c++)
Console.Write("{0} ", A[r,c]);
Console.WriteLine();
}
// Перестановка нулей на главную диагональ
int d = 0;
for(int i = 0; i < N; i++, d++) {
for(int j = 0; j < N; j++) {
if(A[i,j] == 0) {
for(int c = j; c > d; c--)
Test.Swap(ref A[i,c], ref A[i,c-1]);
for(int c = j; c < d; c++)
Test.Swap(ref A[i,c], ref A[i,c+1]);
break;
}
}
}
Console.WriteLine("\nОбработанная матрица:");
for(int r = 0; r < N; r++) {
for(int c = 0; c < N; c++)
Console.Write("{0} ", A[r,c]);
Console.WriteLine();
}
}
}
public class Test
{
static void Swap(ref int a, ref int b) {
int t = a;
a = b;
b = t;
}
public static void Main()
{
const int N = 5;
int[,] A = new int[N,N] {
{ 1, 4, 0, 5, 7 },
{ 0, 3, 5, 2, 4 },
{ 1, 9, 9, 0, 3 },
{ 0, 8, 1, 5, 1 },
{ 4, 5, 0, 1, 3 }
};
Console.WriteLine("Исходная матрица:");
for(int r = 0; r < N; r++) {
for(int c = 0; c < N; c++)
Console.Write("{0} ", A[r,c]);
Console.WriteLine();
}
// Перестановка нулей на главную диагональ
int d = 0;
for(int i = 0; i < N; i++, d++) {
for(int j = 0; j < N; j++) {
if(A[i,j] == 0) {
for(int c = j; c > d; c--)
Test.Swap(ref A[i,c], ref A[i,c-1]);
for(int c = j; c < d; c++)
Test.Swap(ref A[i,c], ref A[i,c+1]);
break;
}
}
}
Console.WriteLine("\nОбработанная матрица:");
for(int r = 0; r < N; r++) {
for(int c = 0; c < N; c++)
Console.Write("{0} ", A[r,c]);
Console.WriteLine();
}
}
}
Спасибо