Pagini recente » Cod sursa (job #588996) | Cod sursa (job #3135774) | Cod sursa (job #3146276) | Cod sursa (job #550685) | Cod sursa (job #635015)
Cod sursa(job #635015)
//Voro
#include<stdio.h>
#define MAXN 25
#define MAXE 25*25
double A[MAXE][MAXE];
int T[MAXN][MAXN];
int i,j,N,M,stari,x,k;
int main()
{
freopen("minesweeper.in","r",stdin);
freopen("minesweeper.out","w",stdout);
scanf("%d %d",&N,&M); N *= M;
// T[i][j] = i goale, j stegulete
stari = 0;
for (i = 0; i <= N; ++i)
for (j = 0; i + j <= N; ++j)
T[i][j] = stari++;
A[0][0] = 1.0;
for (i = 0; i <= N; ++i)
for (j = 0; i + j <= N; ++j){
if (i == 0 && j == 0)
continue;
x = T[i][j];
if (i > 0)
A[x][ T[i-1][j+1] ] = -1.0 * i;
if (j > 0)
A[x][ T[i][j-1] ] = -1.0 * j;
if (i + j < N)
A[x][ T[i+1][j] ] = -1.0 * (N - i - j);
A[x][x] = 1.0 * N;
A[x][stari] = 1.0 * N;
}
for (i = 0; i < stari; ++i)
for (j = 0; j < stari; ++j)
if (i!=j){
double raport = A[j][i]/A[i][i];
for (k = i; k<=stari; ++k)
A[j][k] -= raport * A[i][k];
}
double Ans = 1.0 * A[stari-1][stari] / A[stari-1][stari-1];
printf("%.6lf\n", Ans);
return 0;
}