题目:有长度为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" 函数。程序执行将在此处开始并结束。 // #includeusing 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<



