Форум: Форум C++Разное
Новые темы: 00
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Оставить по одной из дублирующих строк
 
 автор: morgan18   (23.03.2013 в 23:59)   письмо автору
 
 

По идее функция void Del(Matrix& m); должна удалять дублирующиеся строки, но не удаляет. Как исправить ошибку?
Например если массив такой:
1 2 3 4
6 5 3 7
1 2 3 4
1 4 6 5
1 2 3 4
6 5 3 7
то должны остаться только строки:
1 2 3 4
6 5 3 7
1 4 6 5

#include <iostream>
#include <iomanip>
#include <vector>
#include <Windows.h>
#include <algorithm>
using namespace std;
typedef vector<vector<double>> Matrix;
void DeleteLine(Matrix& m, int numb);
void Sort(Matrix& m, int s);
void Del(Matrix& m);
void GetMatrix(Matrix m);
void GetVector(vector<double> m);
bool Equal(vector<double> m, vector<double> m1);
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int n=3;//Количество деталей
double detal=450;//Размер исходной детали
double max;
vector<double> det;//Размеры деталей
double ost, ost_aux;
Matrix komb;
Matrix kombN;
det.push_back(100);
det.push_back(30);
det.push_back(40);
vector<double>::const_iterator largest = min_element(det.begin(), det.end());

for(int i=0; i<det.size(); i++)
{
for(max = static_cast<int>(detal/det[i]); max>0; max--)
{
vector<doubletmp(det.size()+1);
ost = detal - max*det[i];
if(ost >= *largest)
{
ost_aux = ost;
for(int j=0; j<tmp.size()-1; j++)
{
if(i!=j)
{
if(ost_aux >= det[j])
{
tmp[j] = static_cast<int>(ost_aux/det[j]);
ost_aux -= tmp[j]*det[j];
}
else
continue;
}
else
tmp[i] = max;
}
tmp[det.size()] = ost_aux;
}
else
{
for(int j=0; j<tmp.size()-1; j++)
{
tmp[j] = 0;
if(i==j)
tmp[i] = max;
}
tmp[det.size()] = ost;
}
if((tmp[det.size()] != *largest) && (tmp[det.size()] < *largest))
komb.push_back(tmp);
}
}

//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
//Sort(komb, det.size());//сортируем по отходам
cout<<endl;
cout<<"Исходная матрица "<<endl;
GetMatrix(komb);
cout<<endl;
cout<<"Всего комбинаций -"<<komb.size()<<endl;
Del(komb);
cout<<endl;
cout<<"Должны остаться по одной из дублирубщих строк"<<endl;
GetMatrix(komb);
cout<<endl;
cout<<"Всего комбинаций -"<<komb.size()<<endl;
system("pause");
return 0;
}
void Del(Matrix& m)
{
Matrix tmp;
tmp.push_back(m[0]);
for (int i = 0; i < m.size(); i++)
{
for (int j = 0; j < tmp.size(); j++)
{
if(!equal(m[i].begin(), m[i].end(), tmp[j].begin()))
{

//DeleteLine(m, j);
//cout<<"  "<<i+1<<"  "<<j+1<<"| ";
//GetVector(m[i]);
tmp.push_back(m[i]);
cout<<endl;
break;
}
}
}
cout<<"tmp="<<endl;
GetMatrix(tmp);
cout<<"tmp.size="<<tmp.size();
}
void GetMatrix(Matrix m)
{
for(int i=0; i<m.size(); i++)
{
for(int j=0; j<m[i].size(); j++)
cout<<setw(5)<<m[i][j];
cout<<endl;
}
}
void GetVector(vector<double> m)
{
for(int i=0; i<m.size(); i++)
{
cout<<setw(5)<<m[i];
}
}
void Sort(Matrix& m, int s)
{
for (int i = 0; i < m.size()-1; i++)
{
for (int j = 0; j < m.size()-2-i; j++)
{
vector<doubletmp_aux(s+1);
//сортировка пузырьком по возрастанию - знак >
//сортировка пузырьком по убыванию - знак <
if (m[j][s] > m[j + 1][s]) // сравниваем два соседних элемента
{
// выполняем перестановку элементов массива
tmp_aux = m[j];
m[j] = m[j+ 1];
m[j + 1] = tmp_aux;
}
}
}
}

void DeleteLine(Matrix& m, int numb)
{
if(!m.empty())
{
int n=1;
for(Matrix::iterator it_col=m.begin(); it_col!=m.end(); it_col++, n++)
if(n==numb)
{
m.erase(it_col);
return;
}
}
}

bool Equal(vector<double> m, vector<double> m1)
{
bool key = true;
for(int i=0; i<m.size(); i++)
{
if(m[i] != m1[i])
{
key = false;
break;
}
}
return key;
}

  Ответить  
 
 автор: morgan18   (25.03.2013 в 21:59)   письмо автору
 
   для: morgan18   (23.03.2013 в 23:59)
 

Удалите тему!!!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования