爱编程的大李子 2021-03-29 12:05 采纳率: 50%
浏览 86

大佬们,我这个程序哪里写的不对,测试案例通过了50%.

题目地址:https://ac.nowcoder.com/acm/problem/15434

自己的代码

#include<iostream>
#include<string.h>
using namespace std;
int n,p,q,beginX,beginY,endX,endY,tx,ty;//beginX,beginY:初始坐标  endX,endY:结束坐标
char map[505][505];//地图 
bool book[505][505],flag;//book:做标记 

int NEXT[4][2] = { {-1,0},{0,1},{1,0},{0,-1} };//方向数组
void dfs(int x, int y) {
	if (flag) {//如果已经找到路线则回溯时不再进行其他路线.
		return;
	}
	if (x == endX && y == endY) {
		flag = true;//做标记 
		return;
	}
	
	for (int i = 0; i <= 3; i++)
	{
		tx = x + NEXT[i][0];
		ty = y + NEXT[i][1];
		
		if (tx < 1 || tx>p || ty <1 || ty>q||map[tx][ty]=='x') {//判断是否越界和是否是障碍物 
			continue;
		}
		if (map[tx][ty] == '.' && book[tx][ty] == false) {
			book[tx][ty] = true;
			dfs(tx, ty);
			book[tx][ty] = false;//回溯查看其他路线 
		}
	}
}

int main()
{
	cin >> n;
	while (n--)
	{
		flag = false;
		memset(map, '\0',sizeof(map));
		memset(book, false, sizeof(book));
		cin >> p >> q;
		for (int i = 1; i <= p; i++) {
			for (int j = 1; j <= q; j++) {
				cin >> map[p][q];
				if (map[p][q] == 's') {
					beginX = p;
					beginY = q;
				}
				if (map[p][q] == 't') {
					endX = p;
					endY = q;
				}
			}
		}
		dfs(beginX, beginY);
		book[beginX][beginY] = true;
		if (flag) {
			cout << "YES" << endl;
		}
		else {
			cout << "NO" << endl;
		}
	}
	return 0;
}
  • 写回答

2条回答 默认 最新

  • 开发者小峰 2021-03-29 13:42
    关注

    for (int i = 1; i <= p; i++) {

    for (int j = 1; j <= q; j++) {

    cin >> map[p][q];

    if (map[p][q] == 's') {

    beginX = p;

    beginY = q;

    }

    if (map[p][q] == 't') {

    endX = p;

    endY = q;

    }

    }

    }这里面用p和q不是每次都一样了

    评论

报告相同问题?

悬赏问题

  • ¥15 目详情-五一模拟赛详情页
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line