ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

穿越雷区

2022-02-22 10:33:48  阅读:189  来源: 互联网

标签:tx ty int MN occupy 穿越 MIN1 雷区


code

#include<iostream>
#include<algorithm>
#include<cstdlib>
using namespace std;
const int MN = 101;
char s[MN][MN];
int N, starX, starY, endX, endY, occupy[MN][MN];
int MIN1 = 0x3f3f3f3f;
int inext[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
void dfs(int, int, int);
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	int i, j;
	cin >> N,cin.get();
	//getchar();
	for (i = 0; i < N; ++i) {
		for (j = 0; j < N; ++j) {
			cin>>s[i][j],cin.get();
			//getchar();
			if ('A' == s[i][j]) {
				starX = i, starY = j;
			} else if ('B' == s[i][j]) {
				endX = i, endY = j;
			}
			occupy[i][j] = 0; //initialize
		}

	}
	occupy[starX][starY] = 1;
	dfs(starX, starY, 1);
	if (0x3f3f3f3f == MIN1)MIN1 = -1; //unexplore
	cout << MIN1 << '\n';
	return 0;
}
void dfs(int x, int y, int step) {
	int i, tx, ty;//tx:next x ,ty:next y
	for (i = 0; i < 4; ++i) {
		tx = x + inext[i][0];
		ty = y + inext[i][1];
		if (tx < 0 || ty < 0 || tx >= N || ty >= N) {
			continue;
		}
		if (tx == endX && ty == endY) {
			if (step < MIN1) {
				MIN1 = step;
			}
			return;
		}
		if (!occupy[tx][ty] && s[tx][ty] != s[x][y]) {
			occupy[tx][ty]=1;
			dfs(tx, ty, step + 1);
			occupy[tx][ty] = 0;

		}
	}
}

ref

Q

试题 历届真题 穿越雷区【第六届】【决赛】【B组】
     
资源限制
时间限制:1.0s   内存限制:256.0MB
  X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。
  某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短?

  已知的地图是一个方阵,上面用字母标出了A,B区,其它区都标了正号或负号分别表示正负能量辐射区。
  例如:
  A + - + -
  - + - - +
  - + + + -
  + - + - +
  B + - + -

  坦克车只能水平或垂直方向上移动到相邻的区。

  数据格式要求:

  输入第一行是一个整数n,表示方阵的大小, 4<=n<100
  接下来是n行,每行有n个数据,可能是A,B,+,-中的某一个,中间用空格分开。
  A,B都只出现一次。

  要求输出一个整数,表示坦克从A区到B区的最少移动步数。
  如果没有方案,则输出-1

  例如:
  用户输入:
  5
  A + - + -
  - + - - +
  - + + + -
  + - + - +
  B + - + -

  则程序应该输出:
  10

  资源约定:
  峰值内存消耗(含虚拟机) < 512M
  CPU消耗 < 2000ms


  请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

  所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
  注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
  注意:主类的名字必须是:Main,否则按无效代码处理。

标签:tx,ty,int,MN,occupy,穿越,MIN1,雷区
来源: https://www.cnblogs.com/jeseesmith/p/15921887.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有