C++ Bc. 39 cpp
#include <iostream>
#include <ctime>
#include <cstdlib>
inline double R01()
{
return std::rand()/(RAND_MAX + 1.0);
}
bool neohrozujici_se_veze(int pocet_vezi)
{
const int N = 8;
int sachovnice[N][N] = {{0}};
for (int i=0; i<pocet_vezi; i++)
{
int r, s;
do
{
r = int( R01()*N );
s = int( R01()*N );
}
while (sachovnice[r][s] != 0);
sachovnice[r][s] = 1;
}
for (int r=0; r<N; r++)
{
int pocet = 0;
for (int s=0; s<N; s++)
{
pocet += sachovnice[r][s];
if (pocet > 1) return false;
}
}
for (int s=0; s<N; s++)
{
int pocet = 0;
for (int r=0; r<N; r++)
{
pocet += sachovnice[r][s];
if (pocet > 1) return false;
}
}
return true;;
}
int main()
{
std::srand(std::time(0));
std::cout.setf(std::ios_base::scientific, std::ios_base::floatfield);
std::cout.precision(2);
const long int N = 1000000; // pocet pokusu v jedne simulaci
const long int veze[] = {8, 7, 6}; // pocet vezi v jednotlivych simulacich
long int celkem[] = {0, 0, 0};
char* sep = " +-----------------------------------------------------------+";
std::cout << sep << "\n" << " |";
for (unsigned int k=0; k<sizeof(veze)/sizeof(int); k++)
{
std::cout.width(10);
std::cout << veze[k] << " |";
}
std::cout << "\n" << sep << "\n";
for (int s=1; s<=10; s++)
{
for (unsigned int k=0; k<sizeof(veze)/sizeof(int); k++)
{
int priznive_jevy = 0;
for (int i=0; i<N; i++)
if (neohrozujici_se_veze(veze[k]))
priznive_jevy++;
celkem[k] += priznive_jevy;
std::cout << " | "
<< double(priznive_jevy)/N << " "
<< double(celkem[k])/(N*s);
}
std::cout << " |\n";
}
std::cout << sep << "\n";
}
[ Zpět ]