博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu Hike on a Graph
阅读量:6265 次
发布时间:2019-06-22

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

此题是道bfs搜索的题目。bfs的精髓就是找到下一步的所有可能然后存储起来,有点暴力的感觉,这题就是每步中 所有的可能都入队,然后一一 判断。这道题的题意是 :

给你一幅完全图,再给你三个盘,目的是把这三个盘移动到一个点上,输出最少步数!盘移动的时候有要求,比如移第一个盘,把1盘移动到2这个位置,(1,2)这个点有颜色标记,另外两个盘比如说在3,4两点,那么1盘能移动到2这个点的条件是(1,2)这个点的颜色要与(3,4)这点的颜色相同!!

#include"iostream"#include"stdio.h"#include"algorithm"#include"string.h"#include"cmath"#include"string"#include"queue"#define mx 105using namespace  std;int n,p1,p2,p3;struct node{    int p[3];    int step;};char g[mx][mx];bool vis[mx][mx][mx];//标记某种情况是否已出现过void Set(node a){    vis[a.p[0]][a.p[1]][a.p[2]]=false;}bool judge(node a) //判断此情况是否已出现过{    return vis[a.p[0]][a.p[1]][a.p[2]];}bool End(node a) //判断是否完成操作{    if(a.p[0]==a.p[1]&&a.p[1]==a.p[2]) return true;    return false;}void bfs(){    queue
q; while(!q.empty()) q.pop(); node cur,next; cur.p[0]=p1;cur.p[1]=p2;cur.p[2]=p3;cur.step=0; q.push(cur); Set(cur); int i; while(!q.empty()) { cur=q.front(); q.pop(); if(End(cur)) { cout<
<
>n,n) { memset(vis,true,sizeof(vis)); cin>>p1>>p2>>p3; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { cin>>g[i][j];//用于单个字符的输入,不会读入空格,以前一直误以为会连空格一起读入 } } bfs(); } return 0;}
View Code

 

转载于:https://www.cnblogs.com/acm-jing/p/4433539.html

你可能感兴趣的文章
putty提供的两个文件传输工具PSCP、PSFTP详细介绍
查看>>
好的程序员有3种美德,
查看>>
BAT面试需要什么样的程序员?
查看>>
认识Java Core和Heap Dump
查看>>
NYOJ61 传纸条(一) 双线程dp
查看>>
数组拍平最优解
查看>>
leetcode 303. Range Sum Query - Immutable
查看>>
java中的生产者模式
查看>>
Rabin Karp 算法实战
查看>>
IIS7启用静态压缩
查看>>
Scala进阶之路-进程控制之执行shell脚本
查看>>
MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解
查看>>
MapReduce编程模型及其在Hadoop上的实现
查看>>
SEH(__try,__except)
查看>>
Pinterest架构:两年内月PV从零到百亿
查看>>
选择排序
查看>>
关于redis有序集合http://www.runoob.com/redis/redis-sorted-sets.html
查看>>
LESS速查
查看>>
20.pipe
查看>>
.NET Entity Framework入门操作
查看>>