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

设某点的期望步数为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. Nessus离线安装及升级插件

    最近做客户的内网主机漏洞扫描,申请了一台内网主机做扫描服务器,安装Nessus.由于客户严格限制内网主机不能开通外网访问权限,折腾了一下Nessus离线激活和离线更新漏洞插件,详细过程截图记录. 一. ...

  2. 使用Python + Selenium打造浏览器爬虫

    Selenium 是一款强大的基于浏览器的开源自动化测试工具,最初由 Jason Huggins 于 2004 年在 ThoughtWorks 发起,它提供了一套简单易用的 API,模拟浏览器的各种操 ...

  3. shell下的几个命令

    参考博客: https://www.cnblogs.com/-zyj/p/5760484.html 1. 批量删除筛选的文件夹 ls -l | grep ^d | xargs rm -rf   2. ...

  4. sql语句优化(二)

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 建立索引好处  : 之前做的一个项目 , 一个查询10w多条的数据 ,需要20s ,后来加 ...

  5. OC侧滑删除

    做侧滑的时候发现一个问题,当一个UITableView的cell有的有侧滑,有的没有,当用editActionsForRowAtIndexPath方法的时候发现有点问题,查看了下api,需要用到can ...

  6. Delphi窗体置顶及失去焦点后取得焦点

    unit u_FrmTopMostActive; interface uses Winapi.Windows; implementation // 窗体置顶 procedure SetXwForegr ...

  7. socket 套接字总结

    简单版 服务端 import socket import struct import json import os server_dir = r'E:\Moudule_1\socket练习\serve ...

  8. java取得汉字拼音(pinyin4j)

    jar包:pinyin4j.jar 基本用法: String[] pinyin = PinyinHelper.toHanyuPinyinStringArray('重'); 例如“重”字,该方法返回一个 ...

  9. C++了解free和delete

    (转自:http://www.cnblogs.com/mrye/archive/2012/09/01/2667079.html) void MyMethod1() {     using namesp ...

  10. jQuery UI 拖拽-拉伸

    jquery-ui实现 官网:http://www.runoob.com/jqueryui/example-resizable.html layui实现 demo:http://www.jq22.co ...