宝葫芦
来源:互联网 发布:农村淘宝官网首页 编辑:程序博客网 时间:2024/05/01 15:14
宝葫芦
宝葫芦被放在一个城堡里。城堡由n*m个方格组成,你只能从当前所在的方格跳到相邻的4个方格里,而
且不能跳出城堡的范围。城堡中某些方格里有弹簧,每个弹簧具有一个特定能量p,不同弹簧的p值不一
定相同。如果你跳到一个有弹簧的方格,就会立刻沿着原来运动的方向继续跳p格,如果跳到的方格里又
有弹簧,就马上继续跳,直到跳到一个空的方格或者被墙挡住无法继续前进为止。你能否尽快找到宝葫
芦吗? 输入:第一行有两个整数,n和m(3=<n,m<=100),分别是城堡的行数和列数。其后是一个非负整数k,表示弹簧的个数。在接下来的k行里,每行有三个正数x, y, p,以空格隔开,其中x和y是弹簧的坐标
(2=<x<=n-1, 2=<y<=m-1),p是弹簧的能量。在下面的两行里,分别是你和宝葫芦的坐标。此外,你在空中经过的弹簧对你没有任何影响。已知你、宝葫芦和弹簧的初始位置都不同。x坐标轴的范围是1到n,y坐标轴的范围是1到m。 输出: 最少的步数,或者impossible
注意:输入有多组用例。
测试输入
10 1022 7 52 3 32 81 1测试输出
3源代码
#include <stdio.h> #include <string.h> int que[10002][2]; int dis[10002]; int map[102][102]; int t1[4]={0, 1, 0, -1}, t2[4]={1, 0, -1, 0}; struct point { int x; int y; int energy; }P; void push(int *p, int que_s, int x, int y) { (*p)++; que[*p][0] = x; que[*p][1] = y; map[x][y] = -1; dis[*p] = dis[que_s] + 1; } int main() { int M, N, i, x, y, flag; int spring_number; int que_s = 0, que_e = 0, end_x, end_y; while( scanf("%d %d", &M, &N) != EOF ) { que_s = 0, que_e = 0; memset( map, 0, sizeof(map) ); memset( dis, 0, sizeof(dis) ); scanf( "%d", &spring_number ); for( i = 0; i < spring_number; i++ ) { scanf("%d %d %d", &P.x, &P.y, &P.energy); map[P.x][P.y] = P.energy; } scanf("%d %d", &que[0][0], &que[0][1]); //用队列存储位置坐标 scanf("%d %d", &end_x, &end_y); map[ que[0][0] ][ que[0][1] ] = -1; while( que_s <= que_e ) { if( que[que_s][0] == end_x && que[que_s][1] == end_y) { printf("%d\n", dis[que_s]); break; } for( i = 0; i < 4; i++) { x = que[que_s][0] + t1[i]; y = que[que_s][1] + t2[i]; if( x > 0 && x <= M && y > 0 && y <= N) { flag = map[x][y]; if( flag == -1) continue; if( flag == 0) push( &que_e, que_s, x, y ); else{ while( flag != 0 && flag != -1) { x += flag * t1[i]; y += flag * t2[i]; if( x > 0 && x <= M && y > 0 && y <= N ) flag = map[x][y]; else break; } if( flag == 0 ) push( &que_e, que_s, x, y ); if( flag > 0) { if( t1[i] == 0 && t2[i] == 1 ) y = N; if( t1[i] == 1 && t2[i] == 0 ) x = M; if( t1[i] == 0 && t2[i] == -1 ) y = 1; if( t1[i] == -1 && t2[i] == 0 ) x = 1; if( map[x][y] == 0) push( &que_e, que_s, x, y ); } } } } que_s++; } if( que_s > que_e ) printf("impossible\n"); } return 0; }
0 0
- 宝葫芦
- 宝葫芦
- 宝葫芦
- 葫芦全身都是宝的飞鸽传书2011
- 依瓢画葫芦
- 象牌手拉葫芦
- 葫芦僧判断葫芦案
- 葫芦艾灸,葫芦灸养生技术。
- 顶级葫芦VPN
- 葫芦又被偷了
- 【面经】葫芦面经
- 看国际葫芦与VPN
- 比着葫芦画瓢
- JZOJ4826【小澳的葫芦】
- 【JZOJ4826】小澳的葫芦
- 葫芦外面我们,葫芦英国,澳大利亚葫芦可用通过VPN管理局
- 一个 inline 函数引发的葫芦案
- 搜葫芦(sohulu)网络电视 1.30.05
- iOS、Android外部启动应用,实现应用跳转
- centos7开机不进入图形界面
- redis入门经典
- 找到最大的三个数最少调用几次函数
- 支持向量机:Duality
- 宝葫芦
- java内存详述
- 【设计模式】——桥接模式
- 详解Java8特性之重复注解
- 【机房重构】C#抽象工厂+配置文件在机房中的应用
- 首次使用ubuntu的root密码设置
- DataGridView 添加数据
- HttpUrlconnection类的使用
- 30秒看懂数组中的地址问题