SlideShare a Scribd company logo
1 of 21
«Реализация моделей сложных
задач на языке C++»
Просмотр
Содержание
Авторы
Содержание
1. Титульный слайд
2. Содержание
3. Длинная арифметика
4. Алгоритмы на графах
5. Авторы
Длинная арифметика
Представление длинного числа в памяти
(число 7301542)
A[9] A[8] A[7] A[6] A[5] A[4] A[3] A[2] A[1] A[0]
...0 0 7 3 0 1 5 4 2 7
Длинная арифметика
Алгоритм сложения
1 1 1 1 1
915723912
+ 102427128
----------------
1018151040
int *add(int *a,int *b)
{
int s=a[0]>b[0]?a[0]:b[0];
int x[SIZE]={0};
for(int i=1;i<=s;i++)
{
x[i]+=a[i]+b[i];
if(x[i]>=BASE)
{
x[i]-=BASE;
x[i+1]++;
}
}
if(x[s+1]) s++;
x[0]=s;
return x;
}
Длинная арифметика
Задачи
1. Написать программу вычисления 3N при N>=100
2. Определить, сколько раз в записи числа
встречаются две подряд идущие цифры.
3. Написать программу вычисления N! при N>=100
Длинная арифметика
int *t3n(int n)
{
int x[SIZE]={1,1,0},a[2]={1,3};
for(int j=1;j<=n;j++) eq(x,mul(x,a));
return x;
}
int *mul(int *a,int *b)
{
int v,x[SIZE]={0};
for(int i=1;i<=a[0];i++) for(int j=1;j<=b[0];j++)
{
v=a[i]*b[j]+x[i+j-1];
x[i+j]+=v/BASE;
x[i+j-1]=v%BASE;
}
x[0]=a[0]+b[0];
for(;x[0]-1&&!x[x[0]];x[0]--);
return x;
}
void eq(int *a,int *b)
{
for(int i=0;i<SIZE;i++) a[i]=b[i];
return;
}
int pairs(int *a,int *b)
{
int c=0;
for(int i=1;i<x[0];i++) if(x[i]==x[i+1]) c++;
return c;
}
int *fac(int n)
{
int z[SIZE]={1,1,0}; int x[SIZE]={1,1,0};
for(int i=1;i<=n;inc(z),i++)
{
eq(x,mul(x,z));
}
return x;
}
void inc(int *a)
{
int i;
for(i=1;a[i]==BASE-1;i++) a[i]=0; a[i]++;
if(i==a[0]+1) a[0]++;
return;
}
Алгоритмы на графах
Представление в памяти
21
3
4
5
6
7
1 2 3 4 5 6 7
1 0 1 0 1 0 0 0
2 0 0 0 0 1 0 0
3 0 0 0 1 0 0 0
4 0 0 1 0 0 0 0
5 0 0 0 0 0 0 0
6 0 1 0 0 1 0 0
7 0 0 0 0 0 0 0
1 2
1 1 2
2 1 4
3 3 4
4 4 3
5 2 5
6 6 5
7 6 2Матрица смежности
Перечень
рёбер
Алгоритмы на графах
Поиск в графе
void search(bool **g,bool *w,int v)
{
w[v]=0; cout<<v;
for(int j=0;j<SIZE;j++) if(a[v][j]&&w[j]) search(g,w,j);
return;
}
Алгоритмы на графах
Эйлеров цикл Гамильтонов цикл
1
2 6
7
5
4
3
Эйлеров цикл: 1-3-4-5-7-6-2-3-5-2-1
1
2 6
7
5
4
3
Гамильтонов цикл: 1-2-4-7-3-6-5-1
Алгоритмы на графах
Эйлеров цикл Гамильтонов цикл
1
2 6
7
5
4
3
Гамильтонов цикл: 1-2-4-7-3-6-5-1
void ecyc(int v)
{
int c[size],y=0;
for(int j=0;j<size;j++) if(g[v][j])
{
g[v][j]=g[j][v]=0;
ecyc(j);
}
c[++y]=v;
}
Алгоритмы на графах
Эйлеров цикл Гамильтонов цикл
void ecyc(int v)
{
int c[size],y=0;
for(int j=0;j<size;j++) if(g[v][j])
{
g[v][j]=g[j][v]=0;
ecyc(j);
}
c[++y]=v;
}
void gm(int k)
{
static int s[size]; for(int i=0;i<size;i++_ s[i]=0;
static bool w[MAX]={0};
int v=s[k-1];
for(int j=0;j<size;j++) if(g[v][j]) if(k==n&&j==0)
for(int i=0;i<size;i++) cout<<s[i]<<' ';
else if(w[j])
{
s[k]=j;
w[j]=0;
gm(k+1);
w[j]=1;
}
return;
}
Алгоритмы на графах
Алгоритм
Дейкстры
Алгоритм
Флойда
21
3
4
5
6
7
1
4
2
3
2
N=1
2 1
3 6
4 4
5 ∞
6 ∞
7 ∞
1 2 3 4 5 6 7
1 ∞ 1 6 3 ∞ ∞ ∞
2 ∞ ∞ ∞ ∞ ∞ ∞ ∞
3 ∞ ∞ 5 3 ∞ ∞ ∞
4 ∞ ∞ 2 5 ∞ ∞ ∞
5 ∞ ∞ ∞ ∞ ∞ ∞ ∞
6 ∞ 4 ∞ ∞ 2 ∞ ∞
7 ∞ ∞ ∞ ∞ ∞ ∞ ∞
Алгоритмы на графах
Алгоритм
Дейкстры
Алгоритм
Флойда
1 2 3 4 5 6 7
1 ∞ 1 6 3 ∞ ∞ ∞
2 ∞ ∞ ∞ ∞ ∞ ∞ ∞
3 ∞ ∞ 5 3 ∞ ∞ ∞
4 ∞ ∞ 2 5 ∞ ∞ ∞
5 ∞ ∞ ∞ ∞ ∞ ∞ ∞
6 ∞ 4 ∞ ∞ 2 ∞ ∞
7 ∞ ∞ ∞ ∞ ∞ ∞ ∞
void djx()
{
bool t[size]; int d[size]; for(int i=0;i<size;i++) t[i]=1;
for(int i=0;i<size;i++) d[i]=g[s][i];
d[s]=t[s]=0;
while(!zr(t))
{
int u=mindl(d);
t[u]=0;
for(int i=0;i<n;i++) if(t[i]) d[i]=min(d[i],d[u]+g[u,i]);
}
for(int i=0;i<size;i++) cout<<d[i]<<' '; return;
}
bool zr(bool *a)
{
for(int i=0;i<size;i++) if(a[i]) return false; return true;
}
int mindl(int *d)
{
int min=d[0]; for(int i=0;i<size;i++) if(d[0]<min) min=d[i];
return min;
}
Алгоритмы на графах
Алгоритм
Дейкстры
Алгоритм
Флойда
void djx()
{
bool t[size]; int d[size]; for(int i=0;i<size;i++) t[i]=1;
for(int i=0;i<size;i++) d[i]=g[s][i];
d[s]=t[s]=0;
while(!zr(t))
{
int u=mindl(d);
t[u]=0;
for(int i=0;i<n;i++) if(t[i]) d[i]=min(d[i],d[u]+g[u,i]);
}
for(int i=0;i<size;i++) cout<<d[i]<<' '; return;
}
bool zr(bool *a)
{
for(int i=0;i<size;i++) if(a[i]) return false; return true;
}
int mindl(int *d)
{
int min=d[0]; for(int i=0;i<size;i++) if(d[0]<min) min=d[i];
return min;
}
void fld()
{
int d[size][size];
for(int i=0;i<size;i++)
for(int j=0;j<size;j++) d[i][j]=g[i][j];
for(int i=0;i<size;i++) d[i][i]=0;
for(int m=0;m<size;m++)
for(int i=0;i<size;i++)
for(int j=0;j<size;j++)
d[i][j]=min(d[i][j],d[i][m]+d[m][j]);
for(int i=0;i<size;i++){cout<<'n';
for(int j=0;j<size;j++) cout<<d[i][j]<<' ';}
return;
}
Алгоритмы на графах
Связность
21
3
4
5
6
7
1 2 3 4 5 6 7
1 0 1 1 1 0 0 0
2 0 0 0 0 0 0 0
3 0 0 1 1 0 0 0
4 0 0 1 1 0 0 0
5 0 0 0 0 0 0 0
6 0 1 0 0 1 0 0
7 0 0 0 0 0 0 0
Алгоритмы на графах
Связность
21
3
4
5
6
7
void reach()
{
int r[size][size]; memset(r,0,sizeof(r)); int t[size],s[size];
memset(t,0,sizeof(t));
memset(s,0,sizeof(s));
for(int i=0;i<size;i++)
{
memset(t,0,sizeof(t)); t[i]=1;
do
{
eq(s,t);
for(int l=0;l<size;l++) if(t[l])
for(int j=0;j<size;j++) if(t[j]) r[i][j]=1;
}while(cmp(s,t));
}
return;
}
Алгоритмы на графах
Задачи.
1. Даны два числа – M и N. Написать программу построения графа из
N вершин и M рёбер. Каждой вершине ставится в соответствие
число рёбер, входящих в неё. Граф должен быть таким, чтобы
сумма квадратов этих чисел была минимальна.
2. Задан ориентированный граф с N вершинами. Написать
программу, которая подчитывает количество различный путей
между всеми парами вершин графа. Если таких путей бесконечно
много, вывести -1.
3. Дан взвешенный граф, G=(V,E). Обозначим через D(v,u)
минимальное расстояние между вершинами v,u. Величину
D(G)=Max(D(v,u)) назовём диаметром графа, R(v)=Max(D(v,u)) —
максимальным удалением в графе от вершины v, R(G)=Min(R(v)) —
радиусом графа. Любая вершина t, такая, что R(t)=R(G), называется
центром графа. Написать программу поиска диаметра, радиуса и
центров графа.
Алгоритмы на графах
void gtask1()
{
system("cls");
cout<<"Enter N and M: ";
int n,m; cin>>n>>m; m*=2;
bool a[n][n]; int s[n]; memset(a,0,sizeof(a)); memset(s,0,sizeof(s));
for(int i=0;i<n;i++) s[i]=m/n;
if(m%n){ m/=n; for(int i=0;m;i++) {s[i]++;m--;}}
for(int i=0;i<s[i];i++) for(int j=0;sm(a[i],n)<s[i];j++) if(i!=j) a[i][j]=a[j][i]=1;
cout<<"Result: ";
for(int i=0;i<n;i++){cout<<'n'; for(int j=0;j<n;j++) cout<<a[i][j]<<' ';
return;
}
Алгоритмы на графах
void gtask2()
{
system("cls");
cout<<"Enter number of vertexes: ";
int n; cin>>n;
cout<<"Enter matrix of graph:n";
bool a[n][n]; memset(a,0,sizeof(a));
for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>a[i][j];
int f[n][n]; memset(f,0,sizeof(f));
for(int i=0;i<n;i++) for(int j=0;j<n;j++) f[i][j]=a[i][j];
for(int r=1;r<n;r++)
{
for(int i=0;i<n;i++) for(int k=0;k<n;k++) if(f[i][k])
for(int j=0;j<n;j++) if(a[k][j]) f[i][j]++;
}
for(int i=0;i<n;i++) if(f[i][i])
for(int j=0;j<n;j++) f[j][i]=-1;
cout<<"Result: ";
for(int i=0;i<n;i++){cout<<'n'; for(int j=0;j<n;j++) cout<<f[i][j]<<' ';}
return;
}
Алгоритмы на графах
void gtask3()
{
system("cls");
cout<<"Enter number of vertexes: "; int n; cin>>n;
cout<<"Enter matrix of graph:n"; int g[n][n]; memset(g,0,sizeof(g));
for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>a[i][j]; floyd(n);
int max=0; for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(a[i][j]>max) max=d[i][j];
cout<<"D(G)="<<max;
int r[n]; for(int i=0;i<n;i++) r[i]=mx(d[i],n); int mas=mn(r,n); cout<<"R(G)="<<mas;
cout<<"Centers: "; for(int i=0;i<n;i++) if(r[i]==mas) cout<<i<<' ';
return;
}
int mx(int *a,int n)
{
int max=0;
for(int i=0;i<n;i++) if(a[i]>max) max=a[i];
return max;
}
int mn(int *a,int n)
{
int min=a[0];
for(int i=0;i<n;i++) if(a[i]<min) min=a[i];
return min;
}
void floyd(int size)
{
for(int i=0;i<size;i++) for(int j=0;j<size;j++) d[i][j]=gg[i][j];
for(int i=0;i<size;i++) d[i][i]=0;
for(int m=0;m<size;m++) for(int i=0;i<size;i++) for(int j=0;j<size;j++)
d[i][j]=min(d[i][j],d[i][m]+d[m][j]);
return;
}
Авторы
Выполнил: Важдаев Александр
Руководитель: Сухова Маргарита Александровна

More Related Content

What's hot

Dossier : Les coopératives de producteurs de semences d'arachides au Sénégal
Dossier : Les coopératives de  producteurs de semences d'arachides au SénégalDossier : Les coopératives de  producteurs de semences d'arachides au Sénégal
Dossier : Les coopératives de producteurs de semences d'arachides au SénégalFIDAfrique-IFADAfrica
 
O netม.6.53
O netม.6.53O netม.6.53
O netม.6.53Lunla Nui
 
Sadqay ka Inam -( सदक़े का इनआम )
Sadqay ka Inam -( सदक़े का इनआम )Sadqay ka Inam -( सदक़े का इनआम )
Sadqay ka Inam -( सदक़े का इनआम )Ahmed@3604
 
Bahare Shariat Part 2
Bahare Shariat Part 2Bahare Shariat Part 2
Bahare Shariat Part 2Wajid Malik
 
iKS-Consulting Games Rating 2008 for Russia
iKS-Consulting Games Rating 2008 for RussiaiKS-Consulting Games Rating 2008 for Russia
iKS-Consulting Games Rating 2008 for RussiaProcontent.Ru Magazine
 
Poorana pushkala samedha ponpadapor sastha devotional songs
Poorana pushkala samedha ponpadapor sastha  devotional songsPoorana pushkala samedha ponpadapor sastha  devotional songs
Poorana pushkala samedha ponpadapor sastha devotional songsskishoredr1
 
85 1 гдз. физика. учеб для 8кл-громов, родина_2000 -83с
85 1  гдз. физика. учеб для 8кл-громов, родина_2000 -83с85 1  гдз. физика. учеб для 8кл-громов, родина_2000 -83с
85 1 гдз. физика. учеб для 8кл-громов, родина_2000 -83сrosgdz
 
гдз. физика. учеб для 8кл громов, родина 2000 -83с
гдз. физика. учеб для 8кл громов, родина 2000 -83сгдз. физика. учеб для 8кл громов, родина 2000 -83с
гдз. физика. учеб для 8кл громов, родина 2000 -83сИван Иванов
 
Maximal Independent Set
Maximal Independent SetMaximal Independent Set
Maximal Independent SetStas Fomin
 
ObjectXPathNavigator - Как и зачем?
ObjectXPathNavigator - Как и зачем?ObjectXPathNavigator - Как и зачем?
ObjectXPathNavigator - Как и зачем?SQALab
 
ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?Andrew Mayorov
 

What's hot (12)

Dossier : Les coopératives de producteurs de semences d'arachides au Sénégal
Dossier : Les coopératives de  producteurs de semences d'arachides au SénégalDossier : Les coopératives de  producteurs de semences d'arachides au Sénégal
Dossier : Les coopératives de producteurs de semences d'arachides au Sénégal
 
O netม.6.53
O netม.6.53O netม.6.53
O netม.6.53
 
Math
MathMath
Math
 
Sadqay ka Inam -( सदक़े का इनआम )
Sadqay ka Inam -( सदक़े का इनआम )Sadqay ka Inam -( सदक़े का इनआम )
Sadqay ka Inam -( सदक़े का इनआम )
 
Bahare Shariat Part 2
Bahare Shariat Part 2Bahare Shariat Part 2
Bahare Shariat Part 2
 
iKS-Consulting Games Rating 2008 for Russia
iKS-Consulting Games Rating 2008 for RussiaiKS-Consulting Games Rating 2008 for Russia
iKS-Consulting Games Rating 2008 for Russia
 
Poorana pushkala samedha ponpadapor sastha devotional songs
Poorana pushkala samedha ponpadapor sastha  devotional songsPoorana pushkala samedha ponpadapor sastha  devotional songs
Poorana pushkala samedha ponpadapor sastha devotional songs
 
85 1 гдз. физика. учеб для 8кл-громов, родина_2000 -83с
85 1  гдз. физика. учеб для 8кл-громов, родина_2000 -83с85 1  гдз. физика. учеб для 8кл-громов, родина_2000 -83с
85 1 гдз. физика. учеб для 8кл-громов, родина_2000 -83с
 
гдз. физика. учеб для 8кл громов, родина 2000 -83с
гдз. физика. учеб для 8кл громов, родина 2000 -83сгдз. физика. учеб для 8кл громов, родина 2000 -83с
гдз. физика. учеб для 8кл громов, родина 2000 -83с
 
Maximal Independent Set
Maximal Independent SetMaximal Independent Set
Maximal Independent Set
 
ObjectXPathNavigator - Как и зачем?
ObjectXPathNavigator - Как и зачем?ObjectXPathNavigator - Как и зачем?
ObjectXPathNavigator - Как и зачем?
 
ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?
 

Viewers also liked

Edificio nave industrial 3 actualizado 02-09-2016
Edificio nave industrial  3 actualizado 02-09-2016Edificio nave industrial  3 actualizado 02-09-2016
Edificio nave industrial 3 actualizado 02-09-2016Dario Krausse
 
Music Video Brand Image Amended
Music Video Brand Image AmendedMusic Video Brand Image Amended
Music Video Brand Image Amendedkateharrold
 
Brand Image - Tori Kelly
Brand Image - Tori KellyBrand Image - Tori Kelly
Brand Image - Tori Kellykateharrold
 
Management protocol for theophylline intoxication
Management protocol for theophylline intoxicationManagement protocol for theophylline intoxication
Management protocol for theophylline intoxicationKerolus Shehata
 
Breakout Session presentations ‘Infrastructure Planning, Mike Simpson, Univer...
Breakout Session presentations ‘Infrastructure Planning, Mike Simpson, Univer...Breakout Session presentations ‘Infrastructure Planning, Mike Simpson, Univer...
Breakout Session presentations ‘Infrastructure Planning, Mike Simpson, Univer...The UK Water Partnership
 
Vaikenemisen Salaliitto
Vaikenemisen SalaliittoVaikenemisen Salaliitto
Vaikenemisen Salaliittosyottovasikka
 

Viewers also liked (13)

Video analysis
Video analysisVideo analysis
Video analysis
 
Edificio nave industrial 3 actualizado 02-09-2016
Edificio nave industrial  3 actualizado 02-09-2016Edificio nave industrial  3 actualizado 02-09-2016
Edificio nave industrial 3 actualizado 02-09-2016
 
Любимый город
Любимый городЛюбимый город
Любимый город
 
Discussions
DiscussionsDiscussions
Discussions
 
Chuong 2
Chuong 2Chuong 2
Chuong 2
 
Music Video Brand Image Amended
Music Video Brand Image AmendedMusic Video Brand Image Amended
Music Video Brand Image Amended
 
Brand Image - Tori Kelly
Brand Image - Tori KellyBrand Image - Tori Kelly
Brand Image - Tori Kelly
 
Unemployment
UnemploymentUnemployment
Unemployment
 
Guía GINA asma
Guía GINA  asmaGuía GINA  asma
Guía GINA asma
 
Management protocol for theophylline intoxication
Management protocol for theophylline intoxicationManagement protocol for theophylline intoxication
Management protocol for theophylline intoxication
 
Breakout Session presentations ‘Infrastructure Planning, Mike Simpson, Univer...
Breakout Session presentations ‘Infrastructure Planning, Mike Simpson, Univer...Breakout Session presentations ‘Infrastructure Planning, Mike Simpson, Univer...
Breakout Session presentations ‘Infrastructure Planning, Mike Simpson, Univer...
 
Vaikenemisen Salaliitto
Vaikenemisen SalaliittoVaikenemisen Salaliitto
Vaikenemisen Salaliitto
 
Coldplay yellow (piano score)
Coldplay   yellow (piano score)Coldplay   yellow (piano score)
Coldplay yellow (piano score)
 

More from LIANA180

сбор урока
сбор урокасбор урока
сбор урокаLIANA180
 
презентация
презентацияпрезентация
презентацияLIANA180
 
1задача 2 решения
1задача 2 решения1задача 2 решения
1задача 2 решенияLIANA180
 
педсовет одаренные дети
педсовет одаренные детипедсовет одаренные дети
педсовет одаренные детиLIANA180
 
одаренные дети
одаренные детиодаренные дети
одаренные детиLIANA180
 

More from LIANA180 (6)

сбор урока
сбор урокасбор урока
сбор урока
 
презентация
презентацияпрезентация
презентация
 
1задача 2 решения
1задача 2 решения1задача 2 решения
1задача 2 решения
 
Scribus
ScribusScribus
Scribus
 
педсовет одаренные дети
педсовет одаренные детипедсовет одаренные дети
педсовет одаренные дети
 
одаренные дети
одаренные детиодаренные дети
одаренные дети
 

презентация

  • 1. «Реализация моделей сложных задач на языке C++» Просмотр Содержание Авторы
  • 2. Содержание 1. Титульный слайд 2. Содержание 3. Длинная арифметика 4. Алгоритмы на графах 5. Авторы
  • 3. Длинная арифметика Представление длинного числа в памяти (число 7301542) A[9] A[8] A[7] A[6] A[5] A[4] A[3] A[2] A[1] A[0] ...0 0 7 3 0 1 5 4 2 7
  • 4. Длинная арифметика Алгоритм сложения 1 1 1 1 1 915723912 + 102427128 ---------------- 1018151040 int *add(int *a,int *b) { int s=a[0]>b[0]?a[0]:b[0]; int x[SIZE]={0}; for(int i=1;i<=s;i++) { x[i]+=a[i]+b[i]; if(x[i]>=BASE) { x[i]-=BASE; x[i+1]++; } } if(x[s+1]) s++; x[0]=s; return x; }
  • 5. Длинная арифметика Задачи 1. Написать программу вычисления 3N при N>=100 2. Определить, сколько раз в записи числа встречаются две подряд идущие цифры. 3. Написать программу вычисления N! при N>=100
  • 6. Длинная арифметика int *t3n(int n) { int x[SIZE]={1,1,0},a[2]={1,3}; for(int j=1;j<=n;j++) eq(x,mul(x,a)); return x; } int *mul(int *a,int *b) { int v,x[SIZE]={0}; for(int i=1;i<=a[0];i++) for(int j=1;j<=b[0];j++) { v=a[i]*b[j]+x[i+j-1]; x[i+j]+=v/BASE; x[i+j-1]=v%BASE; } x[0]=a[0]+b[0]; for(;x[0]-1&&!x[x[0]];x[0]--); return x; } void eq(int *a,int *b) { for(int i=0;i<SIZE;i++) a[i]=b[i]; return; } int pairs(int *a,int *b) { int c=0; for(int i=1;i<x[0];i++) if(x[i]==x[i+1]) c++; return c; } int *fac(int n) { int z[SIZE]={1,1,0}; int x[SIZE]={1,1,0}; for(int i=1;i<=n;inc(z),i++) { eq(x,mul(x,z)); } return x; } void inc(int *a) { int i; for(i=1;a[i]==BASE-1;i++) a[i]=0; a[i]++; if(i==a[0]+1) a[0]++; return; }
  • 7. Алгоритмы на графах Представление в памяти 21 3 4 5 6 7 1 2 3 4 5 6 7 1 0 1 0 1 0 0 0 2 0 0 0 0 1 0 0 3 0 0 0 1 0 0 0 4 0 0 1 0 0 0 0 5 0 0 0 0 0 0 0 6 0 1 0 0 1 0 0 7 0 0 0 0 0 0 0 1 2 1 1 2 2 1 4 3 3 4 4 4 3 5 2 5 6 6 5 7 6 2Матрица смежности Перечень рёбер
  • 8. Алгоритмы на графах Поиск в графе void search(bool **g,bool *w,int v) { w[v]=0; cout<<v; for(int j=0;j<SIZE;j++) if(a[v][j]&&w[j]) search(g,w,j); return; }
  • 9. Алгоритмы на графах Эйлеров цикл Гамильтонов цикл 1 2 6 7 5 4 3 Эйлеров цикл: 1-3-4-5-7-6-2-3-5-2-1 1 2 6 7 5 4 3 Гамильтонов цикл: 1-2-4-7-3-6-5-1
  • 10. Алгоритмы на графах Эйлеров цикл Гамильтонов цикл 1 2 6 7 5 4 3 Гамильтонов цикл: 1-2-4-7-3-6-5-1 void ecyc(int v) { int c[size],y=0; for(int j=0;j<size;j++) if(g[v][j]) { g[v][j]=g[j][v]=0; ecyc(j); } c[++y]=v; }
  • 11. Алгоритмы на графах Эйлеров цикл Гамильтонов цикл void ecyc(int v) { int c[size],y=0; for(int j=0;j<size;j++) if(g[v][j]) { g[v][j]=g[j][v]=0; ecyc(j); } c[++y]=v; } void gm(int k) { static int s[size]; for(int i=0;i<size;i++_ s[i]=0; static bool w[MAX]={0}; int v=s[k-1]; for(int j=0;j<size;j++) if(g[v][j]) if(k==n&&j==0) for(int i=0;i<size;i++) cout<<s[i]<<' '; else if(w[j]) { s[k]=j; w[j]=0; gm(k+1); w[j]=1; } return; }
  • 12. Алгоритмы на графах Алгоритм Дейкстры Алгоритм Флойда 21 3 4 5 6 7 1 4 2 3 2 N=1 2 1 3 6 4 4 5 ∞ 6 ∞ 7 ∞ 1 2 3 4 5 6 7 1 ∞ 1 6 3 ∞ ∞ ∞ 2 ∞ ∞ ∞ ∞ ∞ ∞ ∞ 3 ∞ ∞ 5 3 ∞ ∞ ∞ 4 ∞ ∞ 2 5 ∞ ∞ ∞ 5 ∞ ∞ ∞ ∞ ∞ ∞ ∞ 6 ∞ 4 ∞ ∞ 2 ∞ ∞ 7 ∞ ∞ ∞ ∞ ∞ ∞ ∞
  • 13. Алгоритмы на графах Алгоритм Дейкстры Алгоритм Флойда 1 2 3 4 5 6 7 1 ∞ 1 6 3 ∞ ∞ ∞ 2 ∞ ∞ ∞ ∞ ∞ ∞ ∞ 3 ∞ ∞ 5 3 ∞ ∞ ∞ 4 ∞ ∞ 2 5 ∞ ∞ ∞ 5 ∞ ∞ ∞ ∞ ∞ ∞ ∞ 6 ∞ 4 ∞ ∞ 2 ∞ ∞ 7 ∞ ∞ ∞ ∞ ∞ ∞ ∞ void djx() { bool t[size]; int d[size]; for(int i=0;i<size;i++) t[i]=1; for(int i=0;i<size;i++) d[i]=g[s][i]; d[s]=t[s]=0; while(!zr(t)) { int u=mindl(d); t[u]=0; for(int i=0;i<n;i++) if(t[i]) d[i]=min(d[i],d[u]+g[u,i]); } for(int i=0;i<size;i++) cout<<d[i]<<' '; return; } bool zr(bool *a) { for(int i=0;i<size;i++) if(a[i]) return false; return true; } int mindl(int *d) { int min=d[0]; for(int i=0;i<size;i++) if(d[0]<min) min=d[i]; return min; }
  • 14. Алгоритмы на графах Алгоритм Дейкстры Алгоритм Флойда void djx() { bool t[size]; int d[size]; for(int i=0;i<size;i++) t[i]=1; for(int i=0;i<size;i++) d[i]=g[s][i]; d[s]=t[s]=0; while(!zr(t)) { int u=mindl(d); t[u]=0; for(int i=0;i<n;i++) if(t[i]) d[i]=min(d[i],d[u]+g[u,i]); } for(int i=0;i<size;i++) cout<<d[i]<<' '; return; } bool zr(bool *a) { for(int i=0;i<size;i++) if(a[i]) return false; return true; } int mindl(int *d) { int min=d[0]; for(int i=0;i<size;i++) if(d[0]<min) min=d[i]; return min; } void fld() { int d[size][size]; for(int i=0;i<size;i++) for(int j=0;j<size;j++) d[i][j]=g[i][j]; for(int i=0;i<size;i++) d[i][i]=0; for(int m=0;m<size;m++) for(int i=0;i<size;i++) for(int j=0;j<size;j++) d[i][j]=min(d[i][j],d[i][m]+d[m][j]); for(int i=0;i<size;i++){cout<<'n'; for(int j=0;j<size;j++) cout<<d[i][j]<<' ';} return; }
  • 15. Алгоритмы на графах Связность 21 3 4 5 6 7 1 2 3 4 5 6 7 1 0 1 1 1 0 0 0 2 0 0 0 0 0 0 0 3 0 0 1 1 0 0 0 4 0 0 1 1 0 0 0 5 0 0 0 0 0 0 0 6 0 1 0 0 1 0 0 7 0 0 0 0 0 0 0
  • 16. Алгоритмы на графах Связность 21 3 4 5 6 7 void reach() { int r[size][size]; memset(r,0,sizeof(r)); int t[size],s[size]; memset(t,0,sizeof(t)); memset(s,0,sizeof(s)); for(int i=0;i<size;i++) { memset(t,0,sizeof(t)); t[i]=1; do { eq(s,t); for(int l=0;l<size;l++) if(t[l]) for(int j=0;j<size;j++) if(t[j]) r[i][j]=1; }while(cmp(s,t)); } return; }
  • 17. Алгоритмы на графах Задачи. 1. Даны два числа – M и N. Написать программу построения графа из N вершин и M рёбер. Каждой вершине ставится в соответствие число рёбер, входящих в неё. Граф должен быть таким, чтобы сумма квадратов этих чисел была минимальна. 2. Задан ориентированный граф с N вершинами. Написать программу, которая подчитывает количество различный путей между всеми парами вершин графа. Если таких путей бесконечно много, вывести -1. 3. Дан взвешенный граф, G=(V,E). Обозначим через D(v,u) минимальное расстояние между вершинами v,u. Величину D(G)=Max(D(v,u)) назовём диаметром графа, R(v)=Max(D(v,u)) — максимальным удалением в графе от вершины v, R(G)=Min(R(v)) — радиусом графа. Любая вершина t, такая, что R(t)=R(G), называется центром графа. Написать программу поиска диаметра, радиуса и центров графа.
  • 18. Алгоритмы на графах void gtask1() { system("cls"); cout<<"Enter N and M: "; int n,m; cin>>n>>m; m*=2; bool a[n][n]; int s[n]; memset(a,0,sizeof(a)); memset(s,0,sizeof(s)); for(int i=0;i<n;i++) s[i]=m/n; if(m%n){ m/=n; for(int i=0;m;i++) {s[i]++;m--;}} for(int i=0;i<s[i];i++) for(int j=0;sm(a[i],n)<s[i];j++) if(i!=j) a[i][j]=a[j][i]=1; cout<<"Result: "; for(int i=0;i<n;i++){cout<<'n'; for(int j=0;j<n;j++) cout<<a[i][j]<<' '; return; }
  • 19. Алгоритмы на графах void gtask2() { system("cls"); cout<<"Enter number of vertexes: "; int n; cin>>n; cout<<"Enter matrix of graph:n"; bool a[n][n]; memset(a,0,sizeof(a)); for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>a[i][j]; int f[n][n]; memset(f,0,sizeof(f)); for(int i=0;i<n;i++) for(int j=0;j<n;j++) f[i][j]=a[i][j]; for(int r=1;r<n;r++) { for(int i=0;i<n;i++) for(int k=0;k<n;k++) if(f[i][k]) for(int j=0;j<n;j++) if(a[k][j]) f[i][j]++; } for(int i=0;i<n;i++) if(f[i][i]) for(int j=0;j<n;j++) f[j][i]=-1; cout<<"Result: "; for(int i=0;i<n;i++){cout<<'n'; for(int j=0;j<n;j++) cout<<f[i][j]<<' ';} return; }
  • 20. Алгоритмы на графах void gtask3() { system("cls"); cout<<"Enter number of vertexes: "; int n; cin>>n; cout<<"Enter matrix of graph:n"; int g[n][n]; memset(g,0,sizeof(g)); for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>a[i][j]; floyd(n); int max=0; for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(a[i][j]>max) max=d[i][j]; cout<<"D(G)="<<max; int r[n]; for(int i=0;i<n;i++) r[i]=mx(d[i],n); int mas=mn(r,n); cout<<"R(G)="<<mas; cout<<"Centers: "; for(int i=0;i<n;i++) if(r[i]==mas) cout<<i<<' '; return; } int mx(int *a,int n) { int max=0; for(int i=0;i<n;i++) if(a[i]>max) max=a[i]; return max; } int mn(int *a,int n) { int min=a[0]; for(int i=0;i<n;i++) if(a[i]<min) min=a[i]; return min; } void floyd(int size) { for(int i=0;i<size;i++) for(int j=0;j<size;j++) d[i][j]=gg[i][j]; for(int i=0;i<size;i++) d[i][i]=0; for(int m=0;m<size;m++) for(int i=0;i<size;i++) for(int j=0;j<size;j++) d[i][j]=min(d[i][j],d[i][m]+d[m][j]); return; }
  • 21. Авторы Выполнил: Важдаев Александр Руководитель: Сухова Маргарита Александровна