栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构--管道

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构--管道

题目:有长度为L的探测管,从坐标(X,Y)为起点对周围水管进行探测。水管形状如下

红色数字代表水管型号,输入第一行T,代表T个样例;

第二行输入N,代表图的大小N*N;

第三行输入探测管的起始探测的坐标(X,Y)以及长度L;

以下N行输入数字,0代表没有水管,1~7代表如上水管形状;测试样例如下,(3,3)为起始探测点,探测管长度为7,五角星记为能探测到的管子,一共有17根管子可以探测到;

输出最多能探测多少根水管。(本样例中探测起点不算长度,实际考试具体忘了算不算。测试样例是手编样例,不是考试样例。水管形状对应的数字也为手编)

1

6

3 3 7

6 4 1 3 5 0

3 7 6 4 2 0

0 4 3 1 4 5

4 2 4 1 2 2

7 7 1 7 3 6

1 0 7 2 2 4

完整代码:

// 管道.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
 
#include 
using namespace std;
//探测管长度,探测的管道数
int L,step=0,n;
//管道
int pipe[101][101];
//标记管道是否被走过
int book[101][101];
//管子种类(方向分布:右下左上)
int category[9][5] = {
	{0,0,0,0},{1,1,1,1},{0,1,0,1},{1,0,1,0},{1,1,0,0},{0,1,1,0},{0,0,1,1},{1,0,0,1}
};
//1表示通,0表示不通
struct queue {
	int x;
	int y;
	int step;
}Q[10001];
 
//置零操作
void init() {
	for(int i=1;i<=n;i++)
		for (int j = 1;j <= n;j++) {
			book[i][j] = 0;
			pipe[i][j] = 0;
		}
}
//判断当前管道的方向能否与上一个管道方向对应
int  direction(int nextdir,int k) {
	//判断这个管道与k相反的方向是否为1
	//首先判断k的相反方向
	int nek;
	switch (k) {
	case 0:nek = 2;break;
	case 1:nek = 3;break;
	case 3:nek = 1;break;
	case 2:nek = 0;break;
	}
   //cout<=1&&ty>=1&&tx<=n&&ty<=n){
				//判断新坐标是否能走 能走则入队
				if (direction(pipe[tx][ty],k)==1&&book[tx][ty]==0) {
                   
				//做标记 已走过
					book[tx][ty]=1;
				//新的坐标入队
					Q[tail].x = tx;
					Q[tail].y = ty;
				cout<> T;
	//T组样例
	for (i = 1;i <= T;i++) {
		cin >> n;
		//输入起点坐标和探测管长度
		cin >> startx >> starty >> L;
 
		//输入管道地图
		for (int p = 1;p <= n;p++)
			for (int q = 1;q <= n;q++)
				cin >> pipe[p][q];	
		BFS(startx, starty);
		cout< 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1033906.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号