题目描述
时间限制: 1s 空间限制:32M
题目描述:
给定一个N∗M 方格的迷宫,每个方格最多经过一次,且迷宫里有 T 处障碍,障碍处不可通过。
在迷宫中有上下左右四种移动方式,每次只能移动一个方格的距离。数据保证起点上没有障碍。
给定起点坐标和终点坐标,问: 有多少种从起点坐标到终点坐标的行走方案。
输入格式:
第一行有三个整数:N,M,T。N 为行数,M 为列数,T 为障碍总数。(1≤N,M≤5)
第二行有起点坐标 SX,SY 和终点坐标 FX,FY。
接下来 T 行,每行为障碍点的坐标。
输出格式:
从起点到终点的行走方案总数。
样例输入1:
2 2 1
1 1 2 2
1 2
样例输出1:
1
这题
几乎是一道DFS模板题目
首先
我们有一个起点一个终点,有T个障碍的坐标,让我们找走到终点的路有几条
那我们只需构建一个N*M的图,在图上标注障碍,起点和终点,然后BFS找路即可,一边BFS一边记录一个总数ans,最后输出即可。
头文件纯属我的喜好
#include <cassert>
#include <cctype>
#include <cerrno>
#include <cfloat>
#include <ciso646>
#include <climits>
#include <clocale>
#include <cmath>
#include <csetjmp>
#include <csignal>
#include <cstdarg>
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <ccomplex>
#include <cfenv>
#include <cinttypes>
#include <cstdalign>
#include <cstdbool>
#include <cstdint>
#include <ctgmath>
#include <cwchar>
#include <cwctype>
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector>
#include <array>
#include <atomic>
#include <chrono>
#include <condition_variable>
#include <forward_list>
#include <future>
#include <initializer_list>
#include <mutex>
#include <random>
#include <ratio>
#include <regex>
#include <scoped_allocator>
#include <system_error>
#include <thread>
#include <tuple>
#include <typeindex>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
#define int long long//图方便
using namespace std;
int m, n, t, ans, fx, fy, xs, ys;
bool vis[105][105];
int mp[105][105];
int px[] = { 0,0,1,-1 };//4个可以走的点的坐标
int py[] = { 1,-1,0,0 };
void dfs(int x, int y)
{
if (如果到了终点)
{
数量++;
return;
}
for (int i = 0; i <= 3; i++)
{
int cx = x + px[i];
int cy = y + py[i];
if (判断越界和是否被标记)
{
continue;
}
vis[cx][cy] = 1;//标记
dfs(搜下去);
vis[cx][cy] = 0;//这里求的是总数所以一定要回溯!
}
}
signed main()//前面用了define这里要改
{
cin >> n >> m >> t;
cin >> xs >> ys >> fx >> fy;
for (int i = 1; i <= t; i++)
{
int u, v;
cin >> u >> v;
建图
}
先给起点标记上
dfs(开始DFS原点);
cout << ans;//输出总数
return 0;
}
最后,祝大家AC愉快
- AC了
- 没AC
0
投票人
- 这题水
- 这题不水
0
投票人