博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XCOJ 1168 (搜索+期望+高斯消元法)
阅读量:7028 次
发布时间:2019-06-28

本文共 1518 字,大约阅读时间需要 5 分钟。

题目链接

题目大意:D是起点,E是终点。每次等概率往某个方向走,问到达终点的期望步数。到不了终点或步数超限输出tragedy!

解题思路

如果某个点四周都不是障碍,不难有方程:

E(X,Y)= (1/4)E(X-1,Y)+ (1/4)E(X+1,Y)+ (1/4)E(X,Y-1)+ (1/4)E(X,Y+1)+1

变形为一般式,且系数化1:4*E(X,Y)-E(X-1,Y)- E(X+1,Y) - E(X,Y-1) - E(X,Y+1) = 4

更一般化,如果周围有cnt个点可去: cnt*E(X,Y)-E(X-1,Y)- E(X+1,Y) - E(X,Y-1) - E(X,Y+1) = cnt

对于不可达点(不一定是障碍)或终点:E(X,Y)= 0,这一步的处理很重要,不然会导致出现自由变元,导致无穷解。

那么本题思路很明显了:

①BFS或是DFS,标记各点的可达情况。

②对于每个点(元),首先看其是否为不可达点或是终点,令其系数为1后continue

  如果不是,枚举四个方向,系数设为-1。最后该点系数为cnt,解向量初始化为cnt。

③高斯消元(本模板是高斯—约当消元法)。

④由于方程是把起点和终点逆过来列方程的,所以元[起点]的解才是最后的ans。(类似记忆化搜索的方式)

 

#include "cstdio"#include "queue"#include "cstring"#include "algorithm"#include "math.h"using namespace std;#define eps 1e-15char map[15][15],s[15];int n,m,T,sx,sy,ex,ey,vis[15][15],dir[4][2]={-1,0,1,0,0,-1,0,1},equ;double ratio[105][105];struct status{    int x,y;    status(int x,int y):x(x),y(y) {}};void Bfs(int x,int y){    queue
Q;Q.push(status(x,y)); vis[x][y]=1; while(!Q.empty()) { status t=Q.front();Q.pop(); for(int s=0;s<4;s++) { int X=t.x+dir[s][0],Y=t.y+dir[s][1]; if(X<0||Y<0||X>=n||Y>=m||vis[X][Y]||map[X][Y]=='X') continue; vis[X][Y]=1; Q.push(status(X,Y)); } }}void Reset(){ for(int i=0;i
=0&&y>=0&&x
fabs(ratio[k][i])) k=j; swap(ratio[k],ratio[i]); if(fabs(ratio[i][i])

 

2709
Accepted
1148
88
C++ 2668 B 2014-11-06 20:51:07

 

 

 

转载于:https://www.cnblogs.com/neopenx/p/4079962.html

你可能感兴趣的文章
Aisen仿新浪微博客户端项目源码
查看>>
LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTR的区分与转化
查看>>
3 月14日作业
查看>>
学习笔记
查看>>
android service中stub的作用
查看>>
Java 自带MD5加密
查看>>
图片,终于能放图片了
查看>>
Redis新特性——pipeline(管道)
查看>>
SQL Server-表表达式基础
查看>>
HTTPS安全证书访问连接知识讲解
查看>>
面向对象编程(OOP)概述
查看>>
rabbitmq单点及集群搭建 与简单使用
查看>>
服务器介绍
查看>>
Windows Server 2003 DNS服务器配置技巧
查看>>
golang语言渐入佳境[23]-string分割类函数
查看>>
Node全栈开发
查看>>
Linux开机出现grub错误:grub> 解决办法。
查看>>
自定义viewpager
查看>>
Java 代码字节:足智多谋的 Try-With-Resources
查看>>
USB数据采集卡 USB1208LS、1608FS DAQami 软件功能有哪些
查看>>