Найти седловую точку матрицы - 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
Листинг программы
#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"); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д