zoukankan      html  css  js  c++  java
  • 洛谷P1605 迷宫

    题目背景
    给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过。给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案。在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。

    题目描述

    输入格式
    第一行N、M和T,N为行,M为列,T为障碍总数。第二行起点坐标SX,SY,终点坐标FX,FY。接下来T行,每行为障碍点的坐标。

    输出格式
    给定起点坐标和终点坐标,问每个方格最多经过1次,从起点坐标到终点坐标的方案总数。

    输入输出样例
    输入 #1 复制
    2 2 1
    1 1 2 2
    1 2
    输出 #1 复制
    1
    说明/提示
    【数据规模】

    1≤N,M≤5

    参考代码:

    #include<bits/stdc++.h>
    using namespace std;
    int map[6][6];
    bool temp[6][6];
    int dx[4]={0,0,1,-1};//打表;
    int dy[4]={-1,1,0,0};//打表;
    int n,m,t,sx,sy,fx,fy,xx,yy,ans=0;
    void maze(int x,int y)
    {
    	if(x==fx&&y==fy)
    	{
    		ans++;
    		return ;
    	}
    	else
    	{
    		for(int i=0;i<4;i++)
    		{
    			if(temp[x+dx[i]][y+dy[i]]==0&&map[x+dx[i]][y+dy[i]]==1)
    			{
    				temp[x][y]=1;//走过的地方做标记
    				maze(x+dx[i],y+dy[i]);
    				temp[x][y]=0;
    			}
    		}
    	}
    }
    int main()
    {
    	cin>>n>>m>>t;
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=m;j++)
    			map[i][j]=1;
    	cin>>sx>>sy>>fx>>fy;
    	for(int i=1;i<=t;i++)
    	{
    		cin>>xx>>yy;
    		map[xx][yy]=0;//阻碍的坐标填为0
    	}
    	maze(sx,sy);
    	cout<<ans;
    	return 0;
    }
    
  • 相关阅读:
    Android入门第六篇之ListView
    谷歌Volley网络框架讲解——第一篇
    Android网络通信库Volley简介
    Android网络通信框架Volley的学习笔记
    SharedPreferences介绍
    Android之Adapter用法总结
    ANDROID SQLITEOPENHELPER详解
    RxJava、RxBus学习
    【原创】【Andriod】自定义多行多列视图
    [转]android笔记--Intent和IntentFilter详解
  • 原文地址:https://www.cnblogs.com/yonglin1998/p/11780822.html
Copyright © 2011-2022 走看看