
Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Диплом / 11
.cpp#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
#include <fstream>
using namespace std;
#define L 3//количество ребер
#define N 8//количество подграфов которые можно построить на данном графе
int Start=1;//точка начала пути
int Finish=2;//точка конца пути
/*int Edges[L][3] = {{1,12,21}, //ребра графа
{2,13,31}};
{3,24,42},
{4,25,52},
{5,34,43},
{6,35,53},
{7,36,63},
{8,45,54},
{9,56,65},
{10,57,75},
{11,67,76}};*/
void main()
{
setlocale(LC_ALL,"Russian");
int** Edges = (int**)malloc(sizeof(int*)*L);
for (int i=0;i<L;i++)
{
Edges[i] = (int*)malloc(sizeof(int)*3);
}
for (int i=0;i<L;i++)
{
//cout<<"Данные для ребра с номером "<<i<<endl;
cout<<"Введите номер ребра--> ";
cin>>Edges[i][0];
cout<<"Введите название грани (например грань 1-2 должна быть записана как 12)--> ";
cin>>Edges[i][1];
cout<<"Введите название грани наоборот--> ";
cin>>Edges[i][2];
}
double Pr = 0, Data[N][L+2], p=0;
int Way[L],End = Finish,current = 0, buff = -1,x=0, y=0;
int **Connection=(int **)malloc(sizeof(int*)*L);
for (int i=0;i<L;i++)
{
Connection[i]=(int*)malloc(sizeof(int)*L);
}
bool deadlock = false, repetition = false, flag = false;
ofstream out;
out.open("Results.txt");
cout<<"p"<<"\t|\t"<<"Pr(p)"<<endl;
cout<<"---------------------------"<<endl;
for (int i=0; i<N; i++)
{
for (int j=0; j<L+2; j++)
{
Data[i][j] = 0;
}
}
for (int i=0; i<N; i++)//формируем все возможные подграфы
{
int z = i;
for (int j=L-1; j>=0; j--)
{
if (z>1)
{
Data[i][j] = z%2;
z = floor(float(z)/2);
}
else
{
Data[i][j] = z;
break;
}
}
}
while(p<=1)
{
for (int k=0; k<N; k++)// проверяем все подгафы
{
for (int i=0; i<L; i++)// Формирование матрицы связей между точками графа
{
for (int j=0; j<L; j++)
{
if (i==j)
{
Connection[i][j] = 0;
}
else
{
flag = false;
for (int x=0; x<L; x++)
{
for (int y=1; y<=2; y++)
{
if (Edges[x][y]==((i+1)*10+(j+1)) && Data[k][Edges[x][0]-1]==1)
{
Connection[i][j] = 1;
flag = true;
break;
}
}
if (flag) break;
}
if (!flag) Connection[i][j] = 0;
}
}
}
for (int i=0; i<L; i++)
Way[i] = 0;
Way[0] = Start;
End = Finish;
current = 0;
deadlock = false;
repetition = false;
for (int j=0; j<L; j++)
{
repetition = false;
if (Connection[Way[current]-1][End-1]==1)
{
Data[k][L] = 1;
break;
}
if (Connection[Way[current]-1][j]==1)
{
for (int q=0; q<current; q++)
{
if (Way[q]==j+1)
{
repetition = true;
break;
}
}
if (repetition==false)
{
buff = j;
Way[++current] = j+1;
j = 0;
if (Way[current]==End)
{
Data[k][L] = 1;
break;
}
}
}
if (j==(L-1))
{
j = Way[current-1]-1;
Way[current] = 0;
if (Way[0]==0)
{
Data[k][L] = 0;
break;
}
current = current-1;
Connection[Way[current]-1][buff] = 0;
}
}
x = 0;
y = 0;
for (int i=0; i<L; i++)
{
if (Data[k][i]==1)
x=x+1;
else
y=y+1;
}
Data[k][L+1] = pow(p, x)*pow(1-p, y);
if (Data[k][L]==1)
{
Pr+=Data[k][L+1];
}
}
cout<<p<<"\t|\t"<<Pr<<endl;
out<<p<<"\t\t"<<Pr<<endl;
Pr = 0;
p+=0.1;
}
out.close();
system("pause");
}
Соседние файлы в папке Диплом