Задачка про матрицы - C (СИ)
Формулировка задачи:
Нужно задать произвольную квадратную матрицу (нужно для н-го порядка)
0 0 0 ... 0
0 0 0 ... 0
.............
0 0 0 ... 0
И постепенно добавлять единицу. Но на диагонали всегда остаются нули.
Но нужно посчитать сколько матриц удовлетворяют условию :
0 1 1
1 0 1
1 1 0 (главное, чтобы в каждом столбце или строке было одинаковое количество единичек)
Нужно вывести все матрицы, и посчитать количество таких матриц, которые удовлетворяют этому условию.
Помогите придумать как это реализовать на Си
Решение задачи: «Задачка про матрицы»
textual
Листинг программы
#include <stdio.h>
int arr[100][100],n,n2,nm;
void print()
{
int x,y;
for(y=0; y<n; y++)
{
for(x=0; x<n; x++)printf("%d ",arr[x][y]);
printf("\n");
}
printf("\n");
}
void set01(int nn)
{
int i,m,x,y,s1,s2;
m=(nn%n==nn/n)? 1:2;
for(i=0; i<m; i++)
{
arr[nn%n][nn/n]=i;
if(nn<n2-1) set01(nn+1);
else
{
for(s1=x=0; x<n; x++) s1+=arr[x][0];
if(!s1) continue;
for(y=1; y<n; y++)
{
for(s2=x=0; x<n; x++) s2+=arr[x][y];
if(s1!=s2) break;
}
if(y<n) continue;
for(x=0; x<n; x++)
{
for(s2=y=0; y<n; y++) s2+=arr[x][y];
if(s1!=s2) break;
}
if(x<n) continue;
print();
nm++;
}
}
}
int main(int argc, char* argv[])
{
printf(" §¬ВҐГ**®ГЎГўГ¬ ¬ ГўГ*¨æë N:");
scanf("%d",&n);
printf("\n");
n2=n*n;
set01(0);
printf("Е’ ГўГ*ВЁГ¦:%d\n",nm);
getch();
return 0;
}