Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
00002.doc
Скачиваний:
7
Добавлен:
01.03.2025
Размер:
131 Кб
Скачать
☆

Int main(int argc, char* argv[])

{

in >> n;

cout << n;

for (int i=0; i<n; ++i)

{

in >> slova[i]; met[i]=false;

}

for (int i=0; i<n; ++i)cout << slova[i]<<endl;

for(int i=0; i<n; ++i)

{ a[0]=slova[i];

for (int j=0; j<n; j++) met[j]=false;

met[i]=true;

search(1);

}

for (int i=0; i<n; ++i) cout << best[i] << "_";

getch();

}

  1. Написать программу для решения задачи методом ветвей и границ.

int m_1 = 0;

int m_2 = 0;

int mO = 0;

int mini = 1000;

int m[100];

int temp[100];

int ravn[100];

int n;

void search(int k, int m1, int m2)

{

if (k > n - 1)

{

if (abs(m1 - m2) < mini)

{

mini = abs(m1 - m2);

m_1 = m1; m_2 = m2;

for (int i = 0; i < n; i++)

ravn[i] = temp[i];

}

}

else

{

mO = mO - m[k];

if (m1 + m[k] - (m2 + mO) < mini)

{

temp[k] = 1;

search(k + 1, m1 + m[k], m2);

}

if (m2 + m[k] - (m1 + mO) < mini)

{

temp[k] = 2;

search(k + 1, m1, m2 + m[k]);

}

mO = mO + m[k];

}

}

Int main(int argc, char* argv[])

{

cout << "vvedite koli4 " << endl;

cin >> n;

cout << "masu " << endl ;

for(int i = 0; i < n; i++)

{ cin >> m[i]; mO+=m[i]; temp[i]=0;}

search(0, 0, 0);

for (int i = 0; i < n; i++)

cout << ravn[i] << " ";

cout << endl;

cout << m_1 << ' ' << m_2 << ' ' << mO << endl;

}

  1. Написать программу, реализующую метод динамического программирования для решения задачи.(черепашка)

ifstream in("fi.txt");

int n,m;

int a[100][100];

int d[100][100];

void path(int x, int y)

{

if ((x>1)||(y>1))

{

if ( (x==1)||((y>1)&&(d[x][y-1]<d[x-1][y]))) path(x,y-1); else

path(x-1,y);

}

cout <<x<<" " << y << endl;

}

Int main(int argc, char* argv[])

{

in >> m >> n;

for (int i=1; i<=n; ++i)

{ for (int j=1; j<=m; ++j) in >> a[i][j]; }

//cout << m << n;

// строим матрицу d

d[1][1]=a[1][1];

for (int j=2; j<=n; ++j) d[1][j]=a[1][j]+d[1][j-1];

for (int i=2; i<=n; ++i)

{

for (int j=1; j<=m; ++j)

{

if (d[i][j-1])

{

if (d[i-1][j]<d[i][j-1]){ d[i][j]=d[i-1][j]+a[i][j];} else

{ d[i][j]=d[i][j-1]+a[i][j]; }

} else

d[i][j]=d[i-1][j]+a[i][j];}

};

for (int i=1; i<=n; ++i)

{

for (int j=1; j<=m; ++j) cout << d[i][j]<< " ";

cout << endl;

};

path(m,n);

}

  1. Написать программу поиска центра графа.

  2. Написать программу для подсчета количества компонентов связности в заданном неориентированном графе.

int **mas;

int n;

int *P;

int *pre;

int col=0;

int NumPre=0;

deque<int> ocher;

void bfs(int v)

{

NumPre++;

pre[v]=NumPre;

ocher.push_back(v);

while(!ocher.empty())

{

v=ocher.front();

ocher.pop_front();

for(int i=0;i<=n-1;++i) if((mas[v][i]==1) && (pre[i]==0))

{

P[i]=v;

ocher.push_back(i);

NumPre++;

pre[i]=NumPre;

}

} ++col;

cout << col <<' ';

}

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