• 洛谷P1238 走迷宫


    走迷宫

    题目链接

    这道题第一次写的时候写了好久,因为不会写输出qwqwq,于是让某苦力调了两天一个对的程序。
    还有这道题需要另外注意的地方是它对顺序有要求,并且一定要分清你的横纵坐标和行列是不一样的。
    然后应该就没有什么了吧。。。
    AC代码如下:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #define MAXN 10010
    using namespace std;
    int G[MAXN][MAXN];
    int vis[MAXN][MAXN];
    int m,n;
    int SX,SY,EX,EY;
    int P[MAXN][2];
    int total=0;
    int next[4][2]={{0,-1},{-1,0},{0,1},{1,0}};
    void dfs(int x,int y,int step)
    {
    	//if(x<1||x>m||y<1||y>n) return;
    	P[step][0]=x;
    	P[step][1]=y;
    	if(x==EX&&y==EY)
    	{
    		for(int i=0;i<step;i++)
    		{
    			printf("(%d,%d)->",P[i][0],P[i][1]);
    		}
    		printf("(%d,%d)
    ",P[step][0],P[step][1]);
    		total++;
    		return;
    	}
    	//int a;
    //	int b;
    	for(int i=0;i<=3;i++)
    	{
    		int a=x+next[i][0];
    		int b=y+next[i][1];
    		if(G[a][b]==1&&vis[a][b]==0)
    		{
    			vis[a][b]=1;
    			dfs(a,b,step+1);
    			vis[a][b]=0;
    		}
    	}
    }
    int main()
    {
    	scanf("%d%d",&m,&n);
    	for(int i=1;i<=m;i++)
    	{
    		for(int j=1;j<=n;j++)
    		{
    			scanf("%d",&G[i][j]);
    		}
    	}
    	scanf("%d%d%d%d",&SX,&SY,&EX,&EY);
    	vis[SX][SY]=1;
    	dfs(SX,SY,0);
    	if(total==0)
    	{
    		printf("-1");
    	}
    	return 0;
    }
    
  • 相关阅读:
    [NOI2016]循环之美(杜教筛)
    [CF600E]Dsu on tree
    [POI2015]Myjnie
    [POI2015]Odwiedziny
    [POI2015]Logistyka
    [POI2015]Wilcze doły
    [POI2017]Sabotaż
    [BZOJ3928/4048]Outer space invaders
    [BZOJ5109]大吉大利,晚上吃鸡!
    [AGC016E]Poor Turkeys
  • 原文地址:https://www.cnblogs.com/LITTLESUNwl/p/10676058.html
Copyright © 2020-2023  润新知