题目:有一个地图,一个人从某个点出发,问走到花园的期望步数为多少

设某点的期望步数为Ei。

那么目标的Ei=0。

Ei=(Enext1+Enext2……Enextk)/k+1。

为什么是这个公式 因为 如果 Ei-1的期望应该等于所有从Ei出发的点的期望总和

bfs完 套一个高斯消元就ok了

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string.h>
#include <cmath>
#include <queue>
using namespace std;
#define eps 1e-9
const int MAXN=;
double a[MAXN][MAXN],x[MAXN];//方程的左边的矩阵和等式右边的值,求解之后x存的就是结果
int equ,var;//方程数和未知数个数
int Gauss(int cequ, int cvar)
{
equ=cequ; var=cvar;
int i,j,k,col,max_r;
for(k=,col=;k<equ&&col<var;k++,col++)
{
max_r=k;
for(i=k+;i<equ;i++)
if(fabs(a[i][col])>fabs(a[max_r][col]))
max_r=i;
if(fabs(a[max_r][col])<eps)continue;
if(k!=max_r)
{
for(j=col;j<var;j++)
swap(a[k][j],a[max_r][j]);
swap(x[k],x[max_r]);
}
x[k]/=a[k][col];
for(j=col+;j<var;j++)a[k][j]/=a[k][col];
a[k][col]=;
for(i=;i<equ;i++)
if(i!=k)
{
x[i]-=x[k]*a[i][col];
for(j=col+;j<var;j++)a[i][j]-=a[k][j]*a[i][col];
a[i][col]=;
}
}
return ;
}
char str[][];
bool falg[][];
int dx[]={,,,-};
int dy[]={,-,,};
void bfs(int n,int m)
{
queue<int>Qy,Qx;
memset(falg,false,sizeof(falg));
while(!Qy.empty())Qy.pop();
while(!Qx.empty())Qx.pop();
for(int i=; i<n; i++)
for(int j=; j<m; j++)
if(str[i][j]=='$'){
falg[i][j]=true;
Qx.push(i);
Qy.push(j);
} while(!Qy.empty()){
int ux=Qx.front();
int uy=Qy.front();
Qx.pop();
Qy.pop();
for(int i=; i<; i++)
{
int tx=ux+dx[i];
int ty=uy+dy[i];
if(tx>=&&ty>=&&tx<n&&ty<m&&str[tx][ty]!='#'&&falg[tx][ty]==false){
falg[tx][ty]=true;
Qy.push(ty);
Qx.push(tx);
}
}
}
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)==){
for(int i=; i<n; i++){
scanf("%s",str[i]);
}
memset(a,,sizeof(a));
memset(x,,sizeof(x));
bfs(n,m);
int sx=-,sy=-;
for(int i=; i<n; i++)
for(int j=; j<m; j++)
{ if(str[i][j]=='#')continue;
int cnt=;
if(str[i][j]=='$'){
a[i*m+j][i*m+j]=;
x[i*m+j]=;
continue;
}
if(str[i][j]=='@'){
sx=i; sy=j;
}
for(int k=; k<; k++){
int tx=i+dx[k];
int ty=j+dy[k];
if(tx>=&&ty>=&&tx<n&&ty<m&&str[tx][ty]!='#'&&falg[tx][ty]){
a[i*m+j][tx*m+ty]=-;
cnt++;
}
}
a[i*m+j][i*m+j]=cnt;
x[i*m+j]=cnt;
}
if(sx!=-&&sy!=-&&falg[sx][sy]&&Gauss(n*m,n*m)){
printf("%.6lf\n",x[sx*m+sy]);
}else{
puts("-1");
}
}
return ;
}

hdu2262 高斯消元的更多相关文章

  1. HDU2262;Where is the canteen(高斯消元+期望)

    传送门 题意 给出一张图,LL从一个点等概率走到上下左右位置,询问LL从宿舍走到餐厅的步数期望 分析 该题是一道高斯消元+期望的题目 难点在于构造矩阵,我们发现以下结论 设某点走到餐厅的期望为Ek 1 ...

  2. 【BZOJ-3143】游走 高斯消元 + 概率期望

    3143: [Hnoi2013]游走 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2264  Solved: 987[Submit][Status] ...

  3. 【BZOJ-3270】博物馆 高斯消元 + 概率期望

    3270: 博物馆 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 292  Solved: 158[Submit][Status][Discuss] ...

  4. *POJ 1222 高斯消元

    EXTENDED LIGHTS OUT Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9612   Accepted: 62 ...

  5. [bzoj1013][JSOI2008][球形空间产生器sphere] (高斯消元)

    Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧 ...

  6. hihoCoder 1196 高斯消元·二

    Description 一个黑白网格,点一次会改变这个以及与其连通的其他方格的颜色,求最少点击次数使得所有全部变成黑色. Sol 高斯消元解异或方程组. 先建立一个方程组. \(x_i\) 表示这个点 ...

  7. BZOJ 2844 albus就是要第一个出场 ——高斯消元 线性基

    [题目分析] 高斯消元求线性基. 题目本身不难,但是两种维护线性基的方法引起了我的思考. void gauss(){ k=n; F(i,1,n){ F(j,i+1,n) if (a[j]>a[i ...

  8. SPOJ HIGH Highways ——Matrix-Tree定理 高斯消元

    [题目分析] Matrix-Tree定理+高斯消元 求矩阵行列式的值,就可以得到生成树的个数. 至于证明,可以去看Vflea King(炸树狂魔)的博客 [代码] #include <cmath ...

  9. UVALive 7138 The Matrix Revolutions(Matrix-Tree + 高斯消元)(2014 Asia Shanghai Regional Contest)

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=6 ...

随机推荐

  1. day2_jmeter断言

    断言就是:检查返回结果,测试是否通过,就是自动帮你校验结果用的 1)添加响应断言 我们模式匹配规格选择包括

  2. 《HTTP - 理解 Content-Type》

    一:引言 在此之前先看一个小例子:(html 上传文件,服务端为PHP) <?php var_dump($_FILES);?> <!DOCTYPE html> <html ...

  3. selenium+xpath在不同层级的写法

    总结:定位虽然用Inndex定位最快,但是定位最好不要用浏览器自带定位xpath,尽量不要用Index,否则写的UI自动化脚本的定位元素,需要重新维护.代价太大. 一:不在同一层级,可以用[./..] ...

  4. 关于webpack,babel,以及es6和commonJS之间的联系(转)

    add by zhj: babel是将es6转为es5,而webpack从名字也能看出来,是一个打包工具,根据文件之间的依赖关系,将文件进行打包 原文:https://blog.csdn.net/a2 ...

  5. 不能往Windows Server 2008 R2 Server中复制文件的解决方法

    目前一直直接往Windows 2008 R2 Server中复制文件(暂时还没有搭建ftp服务),突然不能复制了,于是百度找到了解决方法,特此记录(记忆). 1.在任务管理器中找到“rdpclip.e ...

  6. 程序------>算法

    一.算法: 1.算法的定义:   算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有序序列,并且每条指令表示一个或多个操作.即算法是描述解决问题的方法.(对于给定的问题是可以有多种 算法进行解 ...

  7. document的全量替换、强制创建、删除

    1.document的全量替换(1)语法与创建文档是一样的,PUT /test_index/test_type/id ,如果document id不存在,那么就是创建:如果document id已经存 ...

  8. 基于fiddler实现本地代理完成脚本测试

    配置好fiddler以后,具体操作流程如下: 1.找到后在右边点击AutoResponder,查看,默认情况如下 勾选 2.ctrl+F 搜索 app. 关键字 ,找到后拖到右侧 3.替换本地文件 4 ...

  9. weixin.com的whois信息变更为腾讯了 是准备替换weixin.qq.com吗?

    微信双拼域名weixin.com的whois信息变更,所有人为腾讯.从weixin.com在10月18日这次的whois变更上,透露出腾讯似乎准备启用这个域名.如果启用,毋庸置疑是要应用在腾讯的巨无霸 ...

  10. css继承样式怎么控制?用选择器

    css样式继承性是指下级的样式属性会继承上级的属性,通俗点讲是儿子来继承父亲的属性,比如li会继承ul的属性.css继承原理是我们设置上级(父级)的CSS样式,上级(父级)及以下的子级(下级)都具有此 ...