题      目    http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=58

思路借鉴   DFS-Deep First Search-深度优先搜索 - 卓华寅的文章 - 知乎

收获总结

1. 重定向输入输出流:freopen( "filename" , "mode" ,stream );

          filename:文件名(文件存储在在代码目录下)/文件路径。

          mode:操作模式,操作权限,"r"表示“只读访问”、"w"表示“只写访问”、"a"表示“追加写入”。

          stream:需要被重定向的文件流。stdin是标准输入流,默认为键盘;stdout是标准输出流,默认为屏幕;stderr是标准错误流,一般把屏幕设为默认。

关闭重定向输入输出流:freopen( "CON","r",stdin );不关闭的话,后续无法使用键盘输入的方式读取数据。

头文件:stdio.h

2.内存空间初始化:void * memset ( void * ptr, int value, size_t num );

 eg: memset(buf,0,sizeof(buf));

今天是第一次真正接触 DFS-深度优先算法的题目,虽然在数据结构与算法上已经学习过了,但没有实践,早就忘记了(ノへ ̄、)。平时看到这样的题直接忽略,今天终于直面它了。在这之前做的NYOJ 32 组合数完全没有思路,烦躁!后来这道题和迷宫题完全重合,直接套就行,于是让我找回了自信,顺带理解了DFS的迷宫问题。

不过还有一个问题,应该是评测的锅,使用freopen一直是WA,但将迷宫直接以二维数组存储就能够AC了。

WA代码

 #include<stdio.h>
 ;
 ][],book[][];
 int sx,sy,ex,ey,min;
 ][]={{-,},{,},{,},{,-}};

 void dfs(int x,int y,int step)
 {
     int tx,ty;
     if(x==ex&&y==ey)
     {
         if(min>step)
             min=step;
         return ;
     } 

     ;i<;i++)
     {
         tx=x+next[i][];
         ty=y+next[i][];
         ||tx>||ty<||ty>) continue;
         &&book[tx][ty]==)
         {
             book[tx][ty]=;
             dfs(tx,ty,step+);
             book[tx][ty]=;
         }
     }
 }
 int main()
 {
     freopen("in.txt","r",stdin);
     ;i<;i++)
         ;j<;j++)
             scanf("%d",&num[i][j]);
     freopen("CON", "r", stdin);
     int n;
     scanf("%d",&n);
     while(n--)
     {
         min=max;
         scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
         book[sx][sy]=;
         dfs(sx,sy,);
         printf("%d\n",min);
     }
     ;
 }

AC代码

 #include<stdio.h>
 #include<memory.h>
 ][];
 ][]={
  ,,,,,,,,,
  ,,,,,,,,,
  ,,,,,,,,,
  ,,,,,,,,,
  ,,,,,,,,,
  ,,,,,,,,,
  ,,,,,,,,,
  ,,,,,,,,,
  ,,,,,,,,
 };
 ;
 ][]={{-,},{,},{,},{,-}};
 ];
 void dfs(int x,int y,int step){
     if(x==ex && y==ey){
         if(min>step)    min=step;
         return ;
     }

     ;i<;i++){
         ];
         ];

         ||tx<||ty>||ty<) continue;
         &&maze[tx][ty]==)
         {
             book[tx][ty]=;
             dfs(tx,ty,step+);
             book[tx][ty]=;
         }
     }
 }
 int main(){

     int n;
     scanf("%d",&n);
     ;i<n;i++){
         min=max;
         memset(book,,sizeof(book));
         scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
         book[sx][sy]=;
         dfs(sx,sy,);
         ans[i]=min;
     }
     ;i<n;i++)
         printf("%d\n",ans[i]);
     ;
 } 

NYOJ 53 最少步数的更多相关文章

  1. NYOJ 58 最少步数

    最少步数 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 ...

  2. nyoj 1022 最少步数【优先队列+广搜】

    最少步数 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 ...

  3. ACM 最少步数

    最少步数 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 ...

  4. [ACM_搜索] ZOJ 1103 || POJ 2415 Hike on a Graph (带条件移动3盘子到同一位置的最少步数 广搜)

    Description "Hike on a Graph" is a game that is played on a board on which an undirected g ...

  5. 最少步数(bfs)

    最少步数 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 ...

  6. 最少步数(dfs + bfs +bfs优化)

    最少步数 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 ...

  7. 最少步数(bfs)

    最少步数 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 ...

  8. T1330 最少步数(#Ⅱ- 8)(广度优先搜索)

    [题目描述] 在各种棋中,棋子的走法总是一定的,如中国象棋中马走“日”.有一位小学生就想如果马能有两种走法将增加其趣味性,因此,他规定马既能按“日”走,也能如象一样走“田”字.他的同桌平时喜欢下围棋, ...

  9. NYOJ-58最少步数,广搜思想!

    最少步数 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 ->   Link  <- 这个题深搜广搜都是可以的,迷宫已经给出了,就看怎么做了:一般起点终点确定用广搜 ...

随机推荐

  1. 【对象属性复制】BeanUtils.copyProperties(obj1, obj2);

    实现对象的属性值复制,只会复制命名相同的文件. import org.springframework.beans.BeanUtils; BeanUtils.copyProperties(obj1, o ...

  2. mysql-8.0.16-winx64/Linux修改root用户密码

    连接数据库等基础操作请自行解决哈,本篇是重点记录如何改密码. 一.查询用户密码: 查询用户密码命令: select host, user, authentication_string from mys ...

  3. 模型model

    django的ORM系统 ORM概念:对象关系映射(Object Relational Mapping,简称ORM)ORM的优势:不用直接编写SQL代码,只需像操作对象一样从数据库操作数据. 模型类必 ...

  4. epoll使用详解:epoll_create、epoll_ctl、epoll_wait、close

    epoll - I/O event notification facility 在linux的网络编程中,很长的时间都在使用select来做事件触发.在linux新的内核中,有了一种替换它的机制,就是 ...

  5. UVALive 6255:Kingdoms(状压DFS)

    题目链接 题意 给出n个王国和n*n的矩阵,mp[i][j] 代表第 i 个王国欠第 j 个王国 mp[i][j] 块钱.如果当前的王国处于负债状态,那么这个王国就会被消除,和它相连的王国的债务都会被 ...

  6. Python3 列表的基本操作

    列表索引和切片 和字符串一样,也有索引和切片,只不过切出来的内容是列表. 索引的下标从0开始. lst= ["海上钢琴师", "奥特曼", "舌尖3& ...

  7. (转)User-Agent的由来(原来这么有意思)

    你是否好奇标识浏览器身份的User-Agent,为什么每个浏览器都有Mozilla字样?Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 ( ...

  8. Linux命令学习-history命令

    Linux中,history命令的作用是显示历史记录和执行过的命令. 查看历史所有命令执行记录 history 查看最近的13条历史执行命令 history 13 执行历史记录中,序号为123的命令 ...

  9. c++学习书籍推荐《Visual C++2008入门经典》下载

    百度云及其他网盘下载地址:点我 <Visual C++2008入门经典>学习目标: 使用标准模板库(STL)来组织和操作本地C++程序中的数据 C++程序调试技术 构造Microsoft ...

  10. HTML&CSS构建和设计网站

    1.a链接:两个特性,href.target,href里添加mailto:邮箱可以直接链接到其它人的邮箱,添加#id,可以把窗口位置直接定位到该id的元素位置, target:_black可以在新的窗 ...