不知道为什么过不了。
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int dir[301][301]={0};
float p[301][301]={0},q[301][301]={0};
int main()
{
int n;
while(~scanf("%d",&n))
{
memset(dir,0,sizeof(dir));
memset(p,0,sizeof(p));
memset(q,0,sizeof(q));
int i,j,k,t;
float ans=0;
k=(n+1)/2;
q[k][k]=1;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if((i==1&&j==1)||(i==1&&j==n)||(i==n&&j==n)||(i==n&&j==1))
dir[i][j]=2;
else if(i==1||j==1||i==n||j==n)
dir[i][j]=3;
else dir[i][j]=4;
}
for(t=1;t<=n;t++)
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
p[i][j]=0;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
p[i][j]+=q[i][j-1]/dir[i][j-1];
p[i][j]+=q[i-1][j]/dir[i-1][j];
p[i][j]+=q[i+1][j]/dir[i+1][j];
p[i][j]+=q[i][j+1]/dir[i][j+1];
}
ans+=p[k][t];
p[k][t]=0;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
q[i][j]=p[i][j];
}
if(ans<=0.00001)
printf("0\n");
else
printf("%.4f\n",ans);
}
return 0;
}