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

设某点的期望步数为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. Appium入门(5)__ Appium测试用例(1)

    步骤为:启动AVD.启动Appium.写用例(python).执行 一.启动Android模拟器                   二.启动Appium Server 双击appium图标启动,配置 ...

  2. MonkeyRunner_批处理执行py文件

    新建bat文件,使用call调用monkeyrunner执行py脚本 @echo off echo begin testcase001 %time% %date%call monkeyrunner d ...

  3. es修改指定的field(partial update)

    PUT /index/type/id 创建文档&替换文档,就是一样的语法一般对应到应用程序中,每次的执行流程基本是这样的:1.应用程序发起一个get请求,获取到document,展示到前台界面 ...

  4. pl/sql中文乱码

    增加系统变量变量名:NLS_LANG变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK

  5. Linux查看访问IP

    Linux查看访问IP https://blog.csdn.net/tojohnonly/article/details/82772323

  6. pycharm换行

    Pycharm自动换行 只对当前文件有效的操作是菜单栏->View -> Active Editor -> Use Soft Wraps. 要是想对所有文件都起到效果,就要在sett ...

  7. 用laravel dingo/api创建产品api

    沿着上一篇来讲,我们来创建一个简单的item产品api,也是用到laravel dingo/api来实现,对dingo/api不熟的朋友可以翻看前面的文章.好,我们随着ytkah一起来创建产品api ...

  8. RestFramework——API设计规范

    what's the RESTful RestFramework是一个能快速为我们提供API接口,方便我们编程的框架.API是后端编程人员写的,为了让前端拿数据的一个接口,通常就是以url的形式存在. ...

  9. sap 查看自己代码的结构

    1:进入系统X3C:然后输入T-CODE   bsp_wd_cmpwb

  10. [py]py异常应用

    异常执行路径 代码参考 try: text = input('请输入 --> ') except EOFError: print('为什么你按下了EOF?') except KeyboardIn ...