Задачка про матрицы - 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;
}

Оцени полезность:

12   голосов , оценка 3.667 из 5
Похожие ответы