Найти седловую точку матрицы - C (СИ)

Формулировка задачи:

Помогите написать программу нахождения седловой точки( то есть нужно в двумерной матрице найти элементы, которые являются наибольшими в свооих столбцах и наименьшими в строках) Вот моя программа, но она не работает. Найдите, пожалуйста, ошибку или предложите новый вариант.
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main() 
{
    int a[4][4],v[4][4],c[4][4],
    k,i,ni,nk,mi,mk,min,max;
    
    /*Обнуляем элементы доп. матриц*/
      for(i=0; i<=3; i++)
    {
             for(k=0; k<=3; k++)
             { v[i][k]=0; c[i][k]=0;}
                                            }
    /*Создаём основной массив*/
    printf("Enter massiv:");
    for(i=0; i<=3; i++)
    {
             for(k=0; k<=3; k++)
             {scanf("%d", &a[i][k]);}
                                     }
     /*Выводим основной массив на печать*/
     
     for(i=0; i<=3; i++)
    {
             for(k=0; k<=3; k++)
             {printf("%d\t", a[i][k]);}
               printf("\n");                      }
     
     
     
     
     /*Определяем мин. элементы в каждой строке*/
     
     for(i=0; i<=3; i++)
     {
              min=a[i][0]; v[i][0]=min;
              for(k=0; k<=3; k++)
              {
                      
if (min>a[i][k])
{
  ni=i;nk=k; min=a[i][k]; }
                                            }
  v[ni][nk]=min;                                           
                                             }
  
                                        
   /*Определяем макс. элементы в каждом столбце*/
   for(k=0; k<=3; k++)
     {
              max=a[0][k]; c[0][k]=max;
              for(i=0; i<=3; i++)
              {
                      
if (max<a[i][k])
{
  mk=k; mi=i; max=a[i][k];}
                                            }
             c[mi][mk]=max;                        
          }
      
         /*Выводим на печать седловые точки*/                                  
    for(i=0; i<=3; i++)
    {
             for(k=0; k<=3; k++)
             {
   if ((c[i][k]==v[i][k])&&(c[i][k]!=0)&&(v[i][k]!=0))
                    { printf("Sedlovoy element %d\t", v[i][k]); }
                                                      
                                             }
                                             }
   getch();
    return 0;
}


textual

Код к задаче: «Найти седловую точку матрицы - C (СИ)»

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <locale.h>
#include <time.h>
int main()
{
 long i, j, n, k = 0, k1 = 0, max,min, m, v, b;
 srand((unsigned)time(NULL));
 setlocale(LC_ALL, "rus");
 printf("Ââåäèòå n ГЁ m: ");
 scanf("%d%d",&n,&m);
 printf("\n");
 
 long **a = (long**)calloc(n,sizeof(long*));
 
for(i = 0; i < n; i++)
*(a + i)=(long*)calloc(m,sizeof(long));
 
 
for(i = 0; i < n; i++)
    for(j = 0 ; j < m; j++)
    scanf("%d", &*(*(a + i) + j));
    
for(i = 0; i < m; i++)    
    printf((i == 0)?"%6d":"%5d", i);
    
printf("\n\n");         
            
 for(i = 0; i < n; i++)
 {printf("%2d", i);
    for(j = 0 ; j < m; j++)
    {
        printf("%4d ",*(*(a + i) + j));
    }
    printf("\n");
 }
printf("\nÐåçóëüòГ*ГІ: \n\n");
 
 
 for(i = 0; i < n; i++, k = k1 = 0)
      {max = min = *(*(a + i) + i);
       for(j = 0; j < m; j++)
       
             if(*(*(a + i) + j) >= max)
                 {max = *(*(a + i) + j);
                 v = j;}
                 else
                    if(*(*(a + i) + j) <= min)
                         {min = *(*(a + i) + j);
                         b = j;} 
                                         
for(int l = 0; l < n; l++)
   if(*(*(a + l) + v) >= max)
       k++;
       
for(int l = 0; l < n; l++)
      if(*(*(a + l) + b) <= min)
       k1++;
             
if(k == n)
   printf("(1) Г€Г*äåêñ ñòðîêè - [ ..%d.. ]\n(1) Г€Г*äåêñ ñòîëáöГ* - [ ..%d.. ]\n", i, v);//ГЌГ*èáîëüøèé Гў ñòðîêå ГЁ Г*Г*èìåГ*ГјГёГЁГ© Гў ñòîëáöå. (1)
   
      if(k1 == n)
        printf("(2) Г€Г*äåêñ ñòðîêè - [ ..%d.. ]\n(2) Г€Г*äåêñ ñòîëáöГ* - [ ..%d.. ]\n", i, b); //ГЌГ*èìåГ*ГјГёГЁГ© Гў ñòðîêå ГЁ Г*Г*èáîëüøèé Гў ñòîëáöå. (2)                 
} 
                   
for(i = 0; i < n; i++)
      free(*(a + i));
free(a);        
system("pause");
}
Эта работа вам не подошла?

Вы всегда можете заказать любую учебную работу у наших авторов от 20 руб.


СДЕЛАЙТЕ РЕПОСТ

11   голосов, оценка 3.818 из 5

Источник
Похожие ответы