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;
    }
    
  • 相关阅读:
    1007 Maximum Subsequence Sum(25 分)
    1006 Sign In and Sign Out(25 分)
    1005 Spell It Right
    1004 Counting Leaves
    Struts10分钟入门
    MyBais入门
    Hibernate注解
    save,flush,evict
    HQL连接查询
    Hibernate-延迟加载和立即加载
  • 原文地址:https://www.cnblogs.com/yonglin1998/p/11780822.html
Copyright © 2011-2022 走看看