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

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

{

cout << "kolichestvo elementov : "<<endl;

cin >> n;

cout << "coberi piramidku:" <<endl;

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

{

cin >> temp;

if ((i>0)&&(temp > a[h-1])) { while (temp>a[h-1]) del_st(a); }

add_st(a,temp);

};

for (int i=0; i<h; ++i) cout << a[i];

}

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

(поиск выхода из лабиринта)

const int N=100;

int ochx[N];

int ochy[N];

int h=0;

int t=0;

char ch;

char a[N][N];

int an[N][N];

int i,j;

int m,n;

ifstream in("t.txt");

void add_och(int *a,int em)

{

a[t]=em;

t++;

};

void add_och2(int x, int y)

{

add_och(ochx,x);

t--;

add_och(ochy,y);

};

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

{

n=m=5;

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

{ for (int j=0; j<m; ++j)

{

in.get(a[i][j]);

if(a[i][j]=='1') an[i][j]=-1; else an[i][j]=0;

in.get();

}

};

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

{ for (int j=0; j<m; ++j) cout << an[i][j]<<' '; cout << endl; }

cout << "c kakoi verschini na4at"<< endl;

int x,y,k;

cin >> x >> y;

add_och2(x,y);

k=1;

an[x][y]=k;

while ((x<n)&&(y>0)&&(x>0)&&(y<m)&&(h!=t))

{

x=ochx[h];

y=ochy[h];

if (an[x-1][y]==0) {add_och2(x-1,y); an[x-1][y]=1+an[x][y];}

if (an[x][y-1]==0) {add_och2(x,y-1); an[x][y-1]=1+an[x][y];}

if (an[x+1][y]==0) {add_och2(x+1,y); an[x+1][y]=1+an[x][y];}

if (an[x][y+1]==0) {add_och2(x,y+1); an[x][y+1]=1+an[x][y];}

h++;

};

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

{ for (int j=0; j<m; ++j) cout << an[i][j]<<' '; cout << endl; }

getch();

}

  1. Написать программу, которая строит по исходному массиву двоичное дерево поиска и выводит его элементы в отсортированном порядке.

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

int N;

int mas_new[1000][1000];

void swap(int *a, int *b)

{

int t;

t=*a;

*a=*b;

*b=t;

}

int kol=0;

void perest(int * P,int m)

{

if(m==0)

{ bool f=true;

for(int i=0; i<N; ++i)// cout << P[i];

{

for (int j=i+1; j<N ; ++j)

{

if (abs(P[i]-P[j])==abs(i-j)) f=false;

}

}

if (f){ for(int i=0; i<N; ++i){ cout <<P[i];} //cout <<P[i];

cout <<endl;kol++;}

}

else

{

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

{

swap(&P[i], &P[m]);

perest(P,m-1);

swap(&P[i], &P[m]);

}

}

}

void main()

{

cout << "input razmer" << endl;

cin >> N;

int *P = new int[N];

cout << "posledovatelnost" << endl;

for(int i=0; i<N; ++i) cin >> P[i];

perest(P,N-1);

cout << kol;

}

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

int *a;

void gener(int n, int k, int kk)

{

if(k == -1)

{

int ed=0; int nu=0;

bool f=true;

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

{

if (a[i]==0) nu++;

if (a[i]==1) ed++;

if (nu<ed) f=false;

}

if (f&nu==ed)

{ for(int i = 0; i < kk; i++)

if (a[i]==0) cout << '('; else if (a[i]==1) cout << ')';

cout << endl;

}

}

else

{

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

{

a[k] = i;

gener(n, k-1,kk);

}

}

};

int _tmain(int argc, _TCHAR* argv[])

{

int n=2; int k; int kk;

cout << "vedite kol-vo ckobo4ek";

cin >> k;

kk=k;

a = new int[k];

gener(n,k-1,kk);

getch();

}

  1. Написать программу, реализующую процедуры генерации сочетаний без повторений

#include <set>

const int n = 6, p = 6;

int m[n+1] = {0,12,6,4,8,6,3};

int c[n+1] = {0,21,16,8,18,9,8};

int maxm = 21, mc =0, sumo =0;

int a[n+1], b[n+1];

set<int> s, t;

void search (int k, int sm, int sc)

{

if (k>n)

{ if (sc > mc && sm <= maxm)

{ mc = sc; t = s; }}

else { sumo-=c[k];

s.insert(k);

if (sm + m[k] <=maxm) search(k+1, sm + m[k], sc + c[k]);

s.erase(k);

if (sc + sumo > mc ) search(k+1, sm , sc );

sumo+=c[k];}}

int main()

{

for (int i=1; i<=n; i++) sumo+=c[i];

search(1,0,0);

for (set<int>::iterator i=t.begin();

i!=t.end(); i++) cout << *i << " ";

cout << endl;

}

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

ifstream in("text.txt");

string slova[100];

string a[100];

string best[100];

int i=-1;

int n;

int maxe=0;

int temp=0;

bool met[100];

void search(int k)

{

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

{

if (met[i]==false && slova[i][0]==a[k-1][a[k-1].length()-1]){

a[k]=slova[i];

met[i]=true;

if (k>maxe) { maxe=k;

for(int l=0; l<n;++l) best[l]=a[l];

}

search(k+1);

met[i]=false;

}

};

}