xNiSSaNx
05-10-2013, 00:34
Однажды по программированию(в ВУЗе) препод спросил: "Кто ранее программировал?" Я поднял руку, и вот он мне дал пару задач для индивидуальной работы, первую я сделал, немного подумав, а вот со второй дела сложнее,
-=Нужно найти сходства в двух матрицах разной размерности=-
Препод сказал, что поиск сходства должен выполняться так как я понимаю само значение "сходства", тоесть могу элементы двух матриц с одинаковыми индексами проверить, н оэто будет детской задачей)))
Думаю нужно вот так:
Например есть матрици:
0 0 1 0
0 1 1 1
0 1 1 0
0 0 0 1
и
1 1
1 0
и определить есть ли в них сходства, в данном случае есть))
ну или с этой
0 1
0 1
0 0
Более часа раздумый и эксперементов привели к вот этому
-=-=-=-=-=-=-=-=-=-=-
#include "stdafx.h"
#include <iostream>
using namespace std;
int m1[9][9],m2[9][9];
int rand_m1_i=5,rand_m1_j=5,rand_m2_i=3,rand_m2_j=1;
int _tmain(int argc, _TCHAR* argv[])
{
for(int i=0;i<rand_m1_i;i++)
{
for(int j=0;j<rand_m1_j;j++)
{
cout << (m1[i][j]=rand()%2+1)<<" ";
}
cout << "\n";
}
cout << "\n";
for(int i=0;i<rand_m2_i;i++)
{
for(int j=0;j<rand_m2_j;j++)
{
cout << (m2[i][j]=rand()%2+1)<<" ";
}
cout << "\n";
}
cout << "\n";
for(int stroka=0;stroka<=rand_m1_i-rand_m2_i;stroka++)
{
for(int stolb=0;stolb<=rand_m1_j-rand_m2_j;stolb++)
{
for(int i=0+stroka;i<rand_m2_i+stroka;i++)
{
for(int j=0+stolb;j<rand_m2_j+stolb;j++)
{
if(m1[i][j]==m2[i-stroka][j-stolb])cout << "Y ";else cout << "N ";
}cout << "\n";
}cout << "\n";
}
}
return 0;
}
=-=-=-=-=-=-=-=-=-=-=
В данном случае получаем 2 матрицы заданой размерности(при чем вторая не должна быть больше первой) и, если визуально представить, перемещаем поверх первой матрицы вторую так, чтобы она прошлась по всем элементам первой.
"Лень со мной согласится", что задача выполнена, но возможно и нет))) Есть идея того, чтобы брать куски со второй матрицы и их так же таскать по первой, но это не сейчас.
Как думаете, этого достаточно?
-=Нужно найти сходства в двух матрицах разной размерности=-
Препод сказал, что поиск сходства должен выполняться так как я понимаю само значение "сходства", тоесть могу элементы двух матриц с одинаковыми индексами проверить, н оэто будет детской задачей)))
Думаю нужно вот так:
Например есть матрици:
0 0 1 0
0 1 1 1
0 1 1 0
0 0 0 1
и
1 1
1 0
и определить есть ли в них сходства, в данном случае есть))
ну или с этой
0 1
0 1
0 0
Более часа раздумый и эксперементов привели к вот этому
-=-=-=-=-=-=-=-=-=-=-
#include "stdafx.h"
#include <iostream>
using namespace std;
int m1[9][9],m2[9][9];
int rand_m1_i=5,rand_m1_j=5,rand_m2_i=3,rand_m2_j=1;
int _tmain(int argc, _TCHAR* argv[])
{
for(int i=0;i<rand_m1_i;i++)
{
for(int j=0;j<rand_m1_j;j++)
{
cout << (m1[i][j]=rand()%2+1)<<" ";
}
cout << "\n";
}
cout << "\n";
for(int i=0;i<rand_m2_i;i++)
{
for(int j=0;j<rand_m2_j;j++)
{
cout << (m2[i][j]=rand()%2+1)<<" ";
}
cout << "\n";
}
cout << "\n";
for(int stroka=0;stroka<=rand_m1_i-rand_m2_i;stroka++)
{
for(int stolb=0;stolb<=rand_m1_j-rand_m2_j;stolb++)
{
for(int i=0+stroka;i<rand_m2_i+stroka;i++)
{
for(int j=0+stolb;j<rand_m2_j+stolb;j++)
{
if(m1[i][j]==m2[i-stroka][j-stolb])cout << "Y ";else cout << "N ";
}cout << "\n";
}cout << "\n";
}
}
return 0;
}
=-=-=-=-=-=-=-=-=-=-=
В данном случае получаем 2 матрицы заданой размерности(при чем вторая не должна быть больше первой) и, если визуально представить, перемещаем поверх первой матрицы вторую так, чтобы она прошлась по всем элементам первой.
"Лень со мной согласится", что задача выполнена, но возможно и нет))) Есть идея того, чтобы брать куски со второй матрицы и их так же таскать по первой, но это не сейчас.
Как думаете, этого достаточно?