zoukankan      html  css  js  c++  java
  • 迷宫问题

    仅代码,图解后续完善

    /*
    	迷宫问题
    	测试用例:
    	1 1 1 1 1 1
    	1 0 0 1 1 1
    	1 0 0 0 0 1
    	1 0 1 1 1 1
    	1 0 0 0 0 1
    	1 1 1 1 1 1
    */
    #include <stdio.h>
    #include <stdlib.h>
    #define MAX_SIZE 100
    
    #define M 4
    #define N 4
    
    typedef struct{
    	int incX , incY;
    }Direction;
    
    typedef struct{
    	int x , y;
    	int di;
    }Box;
    
    typedef struct{
    	Box box[MAX_SIZE];
    	int top;
    }Stack;
    
    void InitStack(Stack &s);	//初始化 
    bool isEmpty(Stack s);		//判断栈是否为空
    void Push(Stack &s , Box b);		//入栈 
    Box Pop(Stack &s);	//出栈
    bool isFull(Stack s);		//判断栈是否为满
    void display(Stack s);	//遍历 
    bool findPath(int maze[][6] , Direction direct[] , Stack &s);	//寻找路径 
    
    int main(void){
    	Stack s;
    	Direction direct[4];
    	direct[0].incX = 0;
    	direct[0].incY = 1;
    	direct[1].incX = 1;
    	direct[1].incY = 0;
    	direct[2].incX = 0;
    	direct[2].incY = -1;
    	direct[3].incX = -1;
    	direct[3].incY = 0;
    	
    	int maze[M+2][N+2];
    	for(int i = 0 ; i < M+2 ; i ++){
    		for(int j = 0 ; j < N+2 ; j ++){
    			scanf("%d",&maze[i][j]);
    		}
    	}
    	
    	if(findPath(maze,direct,s)){
    		display(s);
    	}else{
    		printf("迷宫没有出口!");
    	}
    	
    	return 0;
    }
    
    void InitStack(Stack &s){
    	s.top = -1;
    }
    
    bool isEmpty(Stack s){
    	if(s.top == -1){
    		return true;
    	}else{
    		return false;
    	}
    }
    
    void Push(Stack &s , Box b){
    	if(isEmpty(s)){
    		printf("当前栈空!");
    		return;
    	}
    	s.box[++s.top] = b;
    }
    
    bool isFull(Stack s){
    	if(s.top == MAX_SIZE-1){
    		return true;
    	}else{
    		return false;
    	}
    }
    
    Box Pop(Stack &s){
    	Box b;
    	if(isFull(s)){
    		printf("当前栈满!");
    		exit(0);
    	}
    	b = s.box[s.top--];
    	return b;
    }
    
    void display(Stack s){
    	if(isEmpty(s)){
    		printf("当前栈空!");
    		return;
    	}
    	for( ; s.top > 0 ; s.top --){
    		printf("(%d,%d)
    ",s.box[s.top].x , s.box[s.top].y);
    	}
    }
    
    bool findPath(int maze[M+2][N+2] , Direction direct[4] , Stack &s){
    	Box temp;
    	int x , y , di;
    	int line , col;
    	maze[1][1] = -1;
    	temp = {1,1,-1};
    	Push(s,temp);
    	while(!isEmpty(s)){
    		temp = Pop(s);
    		x = temp.x;
    		y = temp.y;
    		di = temp.di + 1;
    		while(di < 4){
    			line = x + direct[di].incX;
    			col = y + direct[di].incY;
    			if(maze[line][col] == 0){
    				temp = {x,y,di};
    				Push(s,temp);
    				x = line;
    				y = col;
    				maze[line][col] = -1;
    				if(x == M && y == N){
    					return true;
    				}else{
    					di = 0;
    				}
    			}else{
    				di ++;
    			}
    		}
    	}
    	return false;
    }
    
  • 相关阅读:
    InitializingBean
    执行jar的记事本
    vue中$forceUpdate()事件
    帆软时间检索限制90天
    vue清楚子组件v-model绑定的值
    Intellij IDEA中启动多个微服务(开启Run Dashboard管理)
    Java将CST的时间字符串转换成需要的日期格式字符串
    axios发送命令如何实现同步
    利用tomcat启动web前端
    vue生命周期
  • 原文地址:https://www.cnblogs.com/Timesi/p/14349280.html
Copyright © 2011-2022 走看看