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

    指针大法好!!

    看见前面大佬都用广搜,我推荐一款指针加深搜:

    这一题我们可以定义一个指针数组,把能相互到达的格子的指针指向同一个地址,这样就能同时改变多个格子的到达数。

    主要步骤:

    int m,n,tot[100000],c[100000],d[100000];//c,d数组为 m 的横纵坐标 
    char ch;int *a[1001][1001];int b[1002][1002];//定义指针 
    for(;m>=1;m--){
    		cin>>c[m]>>d[m];
    		if(a[c[m]][d[m]]){//若指针指向的地址有数,即走过了便直接输出。 
    			cout<<*a[c[m]][d[m]]<<endl;//就是记忆搜索 
    			continue;
    		}
    		f(c[m],d[m]);//搜索 
    		cout<<tot[m]<<endl;
    		tot=0;//记得归0 
    	}
    

    深搜函数:

    void f(int i,int j){//深搜 
    	a[i][j]=&tot[m];//让这个格子的指针,指向累加数; 
    	tot[m]++;//累加答案; 
    	for(int o=0;o<=3;o++)
    		if(i+x[o]>0&&i+x[o]<=n&&j+y[o]>0&&j+y[o]<=n&&!a[i+x[o]][j+y[o]])//走过的不走,不能越界 
    		    if(b[i+x[o]][j+y[o]]!=b[i][j])//题目要求 
    		        f(i+x[o],j+y[o]);//继续搜索
    

    完整代码:

    #include<bits/stdc++.h>
    using namespace std;
    int m,n,tot[100000],c[100000],d[100000];//c,d数组为 m 的横纵坐标 
    char ch;int *a[1001][1001];int b[1002][1002];//定义指针 
    int x[4]={1,0,-1,0};//四个方位 ; 
    int y[4]={0,1,0,-1};//方便对比; 
    void f(int i,int j){//深搜 
    	a[i][j]=&tot[m];//让这个格子的指针,指向累加数; 
    	tot[m]++;//累加答案; 
    	for(int o=0;o<=3;o++)
    		if(i+x[o]>0&&i+x[o]<=n&&j+y[o]>0&&j+y[o]<=n&&!a[i+x[o]][j+y[o]])//走过的不走,不能越界 
    		    if(b[i+x[o]][j+y[o]]!=b[i][j])//题目要求 
    		        f(i+x[o],j+y[o]);//继续搜索
    }
    int main(){
    	cin>>n>>m;
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=n;j++)//输入 
    			scanf("%1d",&b[i][j]);
    	for(;m>=1;m--){
    		cin>>c[m]>>d[m];
    		if(a[c[m]][d[m]]){//若指针指向的地址有数,即走过了便直接输出。 
    			cout<<*a[c[m]][d[m]]<<endl;//就是记忆搜索 
    			continue;
    		}
    		f(c[m],d[m]);//搜索 
    		cout<<tot[m]<<endl;//(输出,圆满)
    	}
        return 0;
    }
    

    这是我的博客空间,发的题解和一些洛谷技巧都在里面。

    另外,本人真的只是一个弱弱的萌新,7月份才入信息组,发的题解讨论等级不高,新人可看。

    ✐☎博主撰文不易,转载还请注明出处;若对本文有疑,请私信或在下方讨论中提出。O(∩_∩)O谢谢!☏

    ☃〔尽管小伙伴们肯定有千百种方式针对,但博主还是极其非常十分不要脸的把反对键吃掉辣!〕☃

    ✿『$At$ $last$:非常一(hu)本(shuo)正(ba)经(dao)的:博主很笨,请不要欺负他』✿✍

  • 相关阅读:
    Win10 下使用 ionic 框架开发 android 应用之搭载开发环境
    C# 图片压缩
    [安卓应用发布]HOLO一键锁屏
    SRS中增加身份验证
    实际搭建SRS测试的初步问题总结
    推荐一款优秀的开源流媒体服务器系统:SRS(Simple RTMP Server)
    C#--格式化数值数据
    操作系统学习笔记系列(二)-操作系统结构
    操作系统学习笔记系列(一)- 导论
    C语言文件读写
  • 原文地址:https://www.cnblogs.com/812-xiao-wen/p/9879282.html
Copyright © 2011-2022 走看看