NYOJ-最少步数

Posted 赤云封天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NYOJ-最少步数相关的知识,希望对你有一定的参考价值。

题目网址:http://acm.nyist.net/JudgeOnline/problem.php?pid=58

打码过程中仔细点就可以了。另外42行代码加在了最后(一轮操作执行完),

而不是每一次函数返回都执行。

描述

这有一个迷宫,有0~8行和0~8列:

 1,1,1,1,1,1,1,1,1
 1,0,0,1,0,0,1,0,1
 1,0,0,1,1,0,0,0,1
 1,0,1,0,1,1,0,1,1
 1,0,0,0,0,1,0,0,1
 1,1,0,1,0,1,0,0,1
 1,1,0,1,0,1,0,0,1
 1,1,0,1,0,0,0,0,1
 1,1,1,1,1,1,1,1,1

0表示道路,1表示墙。

现在输入一个道路的坐标作为起点,再如输入一个道路的坐标作为终点,问最少走几步才能从起点到达终点?

(注:一步是指从一坐标点走到其上下左右相邻坐标点,如:从(3,1)到(4,1)。)

 
输入
第一行输入一个整数n(0<n<=100),表示有n组测试数据;
随后n行,每行有四个整数a,b,c,d(0<=a,b,c,d<=8)分别表示起点的行、列,终点的行、列。
输出
输出最少走几步。
样例输入
2
3 1  5 7
3 1  6 7
样例输出
12
11
 1 #include <stdio.h>
 2 #include <memory.h>
 3 int flag[10][10];
 4 int cnt[10][10];
 5 int a[10][10]={
 6  {1,1,1,1,1,1,1,1,1},
 7  {1,0,0,1,0,0,1,0,1},
 8  {1,0,0,1,1,0,0,0,1},
 9  {1,0,1,0,1,1,0,1,1},
10  {1,0,0,0,0,1,0,0,1},
11  {1,1,0,1,0,1,0,0,1},
12  {1,1,0,1,0,1,0,0,1},
13  {1,1,0,1,0,0,0,0,1},
14  {1,1,1,1,1,1,1,1,1}
15 };
16 int a0,b,c,d;
17 
18 void init_cnt(){
19     for (int i = 0; i < 9; i++)
20         for (int j = 0; j < 9; j++)
21             cnt[i][j] = 11000;
22 }
23 void dfs(int cur_x,int cur_y,int count){
24     if(cur_x == c && cur_y == d){
25         if(cnt[c][d] > count)
26             cnt[c][d] = count;
27         return ;
28     }
29     if(flag[cur_x][cur_y] || a[cur_x][cur_y])
30         return ;
31     flag[cur_x][cur_y] = 1;
32     if(cnt[cur_x][cur_y] > count)
33         cnt[cur_x][cur_y] = count;
34     ///
35     dfs(cur_x - 1, cur_y, count + 1);
36     ///
37     dfs(cur_x + 1, cur_y, count + 1);
38     ///
39     dfs(cur_x, cur_y - 1, count + 1);
40     ///
41     dfs(cur_x, cur_y + 1, count + 1);
42     flag[cur_x][cur_y] = 0;
43 }
44 
45 int main(void){
46     int n;
47     scanf("%d",&n);
48     while(n--){
49         scanf("%d%d%d%d",&a0,&b,&c,&d);
50         for(int i = 0; i < 10; i++)
51             memset(flag[i],0,9 * sizeof(int));
52         init_cnt();
53         dfs(a0,b,0);
54         printf("%d\n",cnt[c][d]);
55     }
56     return 0;
57 }

 

以上是关于NYOJ-最少步数的主要内容,如果未能解决你的问题,请参考以下文章

nyoj58最少步数

NYOJ 353 3D dungeon bfs

nyoj 46-最少乘法次数 (递推)

最少步数

最少步数(dfs)

例8.3最少步数