题目地址

转化为图论问题

对于每个交叉点(X,Y)抽象成节点。与它相邻的四个点中,可以直接连线的边权为0,否则边权为1。

用死了的SPFA解决图论问题。

#include <cstring>
#include <cstdio>
#define GC getchar()
#define Clean(X,K) memset(X,K,sizeof(X))
#define re register
#define Hash(X,Y) ((X)*(M+1)+(Y))
using namespace std ;
int Qread () {
int X = ;
char C = GC ;
while (C > '' || C < '') C = GC ;
while (C >='' && C <='') {
X = X * + C - '' ;
C = GC ;
}
return X ;
}
const int Maxn = , INF = ;
int Times , N , M , Head[Maxn * Maxn] , En = , Q[Maxn * Maxn] , Mdis[Maxn * Maxn], Vis[Maxn * Maxn];
struct Edge {
int From , Goto , NextEdge , Len ;
};
Edge E[Maxn * Maxn * ] ;
void Adg (int X , int Y ,int L) {
E[++En].From = X ;
E[En].Goto = Y ;
E[En].Len = L ;
E[En].NextEdge = Head[X] ;
Head[X] = En ;
}
int SPFA () {
re int H = , T = ;
Clean(Vis , ) , Clean(Mdis , 0x3f) ;
const int St = Hash( , ) , Top = (N + ) * (M + );
if (++T > Top) T = ;
Q[T] = St , Mdis[St] = , Vis[St] = ;
while (H != T) {
if (++ H > Top) H = ;
const int Now = Q[H] ;
Vis[Now] = ;
for (re int i = Head[Now ] ; i ; i = E[i].NextEdge ) {
int Dis = Mdis[Now] + E[i].Len ;
if (Dis < Mdis[E[i].Goto ]) {
Mdis[E[i].Goto ] = Dis ;
if (!Vis[E[i].Goto ]) {
Vis[E[i].Goto ] = ;
if (++ T > Top) T = ;
Q[T] = E[i].Goto ;
}
}
}
}
return Mdis[Hash(N , M)] ;
}
int main () {
//freopen ("P2243.in" , "r" , stdin) ;
Times = Qread () ;
while (Times -- ) {
N = Qread () , M = Qread () ;
Clean (Head , ) , En = ;
for (re int i = ; i < N ; ++ i) {
for (re int j = ; j < M; ++ j) {
char C = GC ;
while (C !='\\' && C !='/') C = GC ;
if (C == '/') {
Adg (Hash(i + , j + ) , Hash (i , j) , ) ;
Adg (Hash (i , j) ,Hash(i + , j + ) , ) ;
Adg (Hash(i + , j) , Hash (i , j + ) , ) ;
Adg (Hash (i , j + ) ,Hash(i + , j) , ) ;
} else if (C == '\\') {
Adg (Hash(i + , j + ) , Hash (i , j) , ) ;
Adg (Hash (i , j) ,Hash(i + , j + ) , ) ;
Adg (Hash(i + , j) , Hash (i , j + ) , ) ;
Adg (Hash (i , j + ) ,Hash(i + , j) , ) ;
}
}
}
int Ans = SPFA() ;
if (Ans < INF)printf ("%d\n" , Ans) ;
else printf ("NO SOLUTION\n") ;
}
fclose (stdin) , fclose (stdout) ;
return ;
}

洛谷P2243 电路维修的更多相关文章

  1. 洛谷 P2243 电路维修

    P2243 电路维修 题目背景 Elf 是来自Gliese 星球的少女,由于偶然的原因漂流到了地球上.在她无依无靠的时候,善良的运输队员Mark 和James 收留了她.Elf 很感谢Mark和Jam ...

  2. 洛谷P2243 电路维修 [最短路]

    题目传送门 电路维修 题目背景 Elf 是来自Gliese 星球的少女,由于偶然的原因漂流到了地球上.在她无依无靠的时候,善良的运输队员Mark 和James 收留了她.Elf 很感谢Mark和Jam ...

  3. 【Dijkstra堆优化】洛谷P2243电路维修

    题目背景 Elf 是来自Gliese 星球的少女,由于偶然的原因漂流到了地球上.在她无依无靠的时候,善良的运输队员Mark 和James 收留了她.Elf 很感谢Mark和James,可是一直也没能给 ...

  4. 洛谷P2242 公路维修问题

    To 洛谷.2242 公路维修问题 题目描述 由于长期没有得到维修,A国的高速公路上出现了N个坑.为了尽快填补好这N个坑,A国决定对M处地段采取交通管制.为了求解方便,假设A国的高速公路只有一条,而且 ...

  5. P2243 电路维修

    P2243 电路维修 题目背景 Elf 是来自Gliese 星球的少女,由于偶然的原因漂流到了地球上.在她无依无靠的时候,善良的运输队员Mark 和James 收留了她.Elf 很感谢Mark和Jam ...

  6. 洛谷 P2242 公路维修问题

    P2242 公路维修问题 题目描述 由于长期没有得到维修,A国的高速公路上出现了N个坑.为了尽快填补好这N个坑,A国决定对M处地段采取交通管制.为了求解方便,假设A国的高速公路只有一条,而且是笔直的. ...

  7. 洛谷P2242 公路维修问题(Road)

    题目描述 在一个夜黑风高,下着暴风雨的夜晚,farmer John的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满. 牛棚一个紧挨着另一个被排成一行,牛就住在里面过夜. 有些牛棚里有牛 ...

  8. Luogu P2243 电路维修 双端队列BFS

    当转移的代价是0和一个分明不同的权值时,可以用双端队列BFS去跑(你跑最短路也没问题..QWQ) 而对于这道题,边旋转代价是1,不旋转代价是0:可以直接建图最短路,也可以跑BFS 这个题建图很有意思: ...

  9. 洛谷 P2317 [HNOI2005]星际贸易 解题报告

    P2317 [HNOI2005]星际贸易 题目描述 输入输出格式 输入格式: 输出格式: 如果可以找到这样的方案,那么输出文件output.txt中包含两个整数X和Y.X表示贸易额,Y表示净利润并且两 ...

随机推荐

  1. Spring Boot(十四)RabbitMQ延迟队列

    一.前言 延迟队列的使用场景:1.未按时支付的订单,30分钟过期之后取消订单:2.给活跃度比较低的用户间隔N天之后推送消息,提高活跃度:3.过1分钟给新注册会员的用户,发送注册邮件等. 实现延迟队列的 ...

  2. Spring Boot 2.x(十四):整合Redis,看这一篇就够了

    目录 Redis简介 Redis的部署 在Spring Boot中的使用 Redis缓存实战 寻找组织 程序员经典必备枕头书免费送 Redis简介 Redis 是一个开源的使用 ANSI C 语言编写 ...

  3. MySQL高可用复制管理工具 —— Orchestrator介绍

    背景 在MySQL高可用架构中,目前使用比较多的是Percona的PXC,Galera以及MySQL 5.7之后的MGR等,其他的还有的MHA,今天介绍另一个比较好用的MySQL高可用复制管理工具:O ...

  4. http服务器搭建之apache与nginx的特性

    一.了解一些简单的概念 HTTP服务器程序: httpd(apache) nginx lighttpd(功能和nginx差不多,活跃度不如ng) 应用程序服务器: IIS Tomcat(开源jsp容器 ...

  5. Java AQS 概述

    AQS 概述 AQS(队列同步器,AbstractQueuedSynchronizer),是用来构建锁或其他同步组件的核心基础框架(比如 ReentrantLock.ReentrantReadWrit ...

  6. php编写生成酷炫验证码

    <?php $im=imagecreate(200,100);//生成画布 imagecolorallocate($im,0,0,0);//背景色 $white=imagecoloralloca ...

  7. 详解Linux高效命令head、tail和cat

    Linux中提供了多种命令和程序用于浏览文件.无论对于新手.普通用户.高级用户.开发人员还是管理员来说,与诸多文件打交道都是一项艰巨的任务.而如何做到高效更称得上是一门艺术. 今天就让我们来探讨几个最 ...

  8. React的组件模式

    组件是 React 的核心,因此了解如何利用它们对于创建优秀的设计结构至关重要. 什么是组件 根据 React 官网的介绍,"组件让你可以将 UI 分割成独立的.可重用的部分,并独立管理每个 ...

  9. springboot之配置文件

    springboot在加载配置文件的时候是有先后顺序的,了解加载配置文件的先后顺序,可以减少编写程序出现错误 1 springboot加载配置文件的先后顺序如下: SpringApplication将 ...

  10. html的标签分类————可以上传的数据篇

    html的标签可以分为: 块级标签:div(白板),H系列(加大加粗,H1—H7,字体一般逐渐变小,一般用作标题),p标签(段落之间有间距) 行内标签:span(白板) 此外,标签之间是可以嵌套的.为 ...