自带bfs输出最短步数的迷宫

exe下载


链接: http://pan.baidu.com/s/1c2mKwsK 密码: xhmp

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <conio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<stdio.h>
#include<map>
#include<string>
#include<queue>
using namespace std;



struct no
{
	int x,y;
	int step;
};



int STEP;
int dir[4][2] = {0,1,0,-1,1,0,-1,0};
char m[10][10] ;
////= {
////{"L........"},
////{"#....a.##"},
////{"######.##"},
////{"...##..##"},
////{".#...#.##"},
////{".##.##.##"},
////{".##....##"},
////{"...###.##"},
////{"##.######"},
////{"#.a...Q##"},
//};
char mm[10][10];
// = {
//{"L........"},
//{"#....a.##"},
//{"######.##"},
//{"...##..##"},
//{".#...#.##"},
//{".##.##.##"},
//{".##....##"},
//{"...###.##"},
//{"##.######"},
//{"#.a...Q##"},
//};
//////可以自己改迷宫 入口总在1,1点
char mo[10][10] = {
{"........."},
{"#.......#"},
{"###..a..."},
{"...#...##"},
{".#.....##"},
{"....##.##"},
{"..a....##"},
{"...###.##"},
{"##.######"},
{"#.....Q##"},
};


int lx,ly;
int qx,qy;
int tr[30][5];
int istr[30];
int xmax,ymax;
int check(int xx,int yy)
{
	if(m[xx][yy] == '#'||xx<0||yy<0||xx>=xmax||yy>=ymax)
	 return 0;
	return 1;
}
int check_(int xx,int yy)
{
	if(mm[xx][yy] == '#'||xx<0||yy<0||xx>=xmax||yy>=ymax)
	 return 0;
	if(mm[xx][yy]>='a'&&mm[xx][yy]<='z') 
	 return -1;
	return 1;
}


int minn = 0;
int bfs()
{
	queue<no> q;
	no a,next,last;
	a.x = lx;
	a.y = ly;
	a.step = 0;
	m[lx][ly] = '#';
	q.push(a);
	while(!q.empty())
	{
		a = q.front();
		printf("aa %d   %d    %d  \n",a.x,a.y,a.step);
		q.pop();
		if(a.x == qx&&a.y == qy)
		{
			return a.step;
		}
		

		for(int i = 0;i < 4;i++)
		{
			next = a;
			next.x = a.x+dir[i][0];
			next.y = a.y+dir[i][1];
			if(check(next.x,next.y)) 
		 	  {
		 	  	next.step++; 
		 	  	if(m[next.x][next.y]>='a'&&m[next.x][next.y]<='z')
		 	  	{
		 	  		int aa = (int)m[next.x][next.y] - 'a';
		 	  		if(next.x == tr[aa][0]&&next.y == tr[aa][1])
		 	  		{
		 	  			m[next.x][next.y] = '#';
		 	  			next.x = tr[aa][2];
						next.y = tr[aa][3];
					   }
					 else
					 {
					 	m[next.x][next.y] = '#';
		 	  			next.x = tr[aa][0];
						next.y = tr[aa][1];
					   }
					    
		 	  		q.push(next);
				   }
				 else
				 {
				 	m[next.x][next.y]='#';
		 	  		
		 	  		q.push(next);
				 }  
		 	  	
			   }
		}
		
	}
	return -1;
}




void see()
{
	
	system("cls");
	printf("~GAME 迷宫\n"); 
	printf("wasd控制 L 的上下左右 找到 Q\n");
	printf("最短路是 %d =_=智障找不到\n",minn);
	printf("  %d %d  \n",lx,ly);
	printf("   当前步数 %d\n",STEP);
	for(int i = 0 ; i < 10;i++)
	{
		for(int j = 0;j<10;j++)
		{
			printf("%c",mm[i][j]);
		}
		printf("\n");
	}
	 
}

void sw(int x1,int y1,int x2,int y2)
{
	char T = mm[x1][y1];
	mm[x1][y1] = mm[x2][y2];
	mm[x2][y2] = T;
	
}

int FF = 0;
int ctrl()
{
	
	if(lx==qx&&ly==qy)
	{
		return 1;
	}STEP++;
	if(FF)
	{
		for(int i = 0;i<30;i++)
		{
			if(istr[i])
			{
				mm[tr[i][0]][tr[i][1]] = mo[tr[i][0]][tr[i][1]];
				mm[tr[i][2]][tr[i][3]] = mo[tr[i][2]][tr[i][3]];
				 
			}
		}
		FF = 0;
	}
	char asd;
	asd = getch();
	
	switch(asd)
	{
		case 'w':
		case 'W':
			if(check_(lx-1,ly) == 1)
			{
				mm[lx][ly] = mo[lx][ly];
				mm[lx-1][ly] = 'L';
				lx = lx-1;
				ly = ly;
				
			}
			else if(check_(lx-1,ly) == 0)
			{
				//DO NOTHING;
			}
			else if(check_(lx-1,ly) == -1)
			{
				mm[lx][ly] = mo[lx][ly];
				FF = 1;  
				int aaa = (int)mm[lx-1][ly] - 'a';
				if(lx-1 == tr[aaa][0]&&ly == tr[aaa][1])
		 	  		{
		 	  			mm[tr[aaa][2]][tr[aaa][3]] = 'L';
		 	  			lx = tr[aaa][2];
		 	  			ly = tr[aaa][3];
		 	  			
					   }
					 else
					 {
					 	mm[tr[aaa][0]][tr[aaa][1]] = 'L';
					 	lx = tr[aaa][0];
		 	  			ly = tr[aaa][1];
					   }
				
			}
			
			break;
		case 's':
		case 'S':
			if(check_(lx+1,ly) == 1)
			{
				mm[lx][ly] = mo[lx][ly];
				mm[lx+1][ly] = 'L';
				lx = lx+1;
				ly = ly;
			}
			else if(check_(lx+1,ly) == 0)
			{
				//DO NOTHING;
			}
			else if(check_(lx+1,ly) == -1)
			{
				mm[lx][ly] = mo[lx][ly];
				FF = 1;  
				int aaa = (int)mm[lx+1][ly] - 'a';
				if(lx+1 == tr[aaa][0]&&ly == tr[aaa][1])
		 	  		{
		 	  			mm[tr[aaa][2]][tr[aaa][3]] = 'L';
		 	  			lx = tr[aaa][2];
		 	  			ly = tr[aaa][3];
					   }
					 else
					 {
					 	mm[tr[aaa][0]][tr[aaa][1]] = 'L';
					 	lx = tr[aaa][0];
		 	  			ly = tr[aaa][1];
					   }
				
			}
			
			break;
		case 'a':
		case 'A':
			if(check_(lx,ly-1) == 1)
			{
				mm[lx][ly] = mo[lx][ly];
				mm[lx][ly-1] = 'L';
				lx = lx;
				ly = ly-1;
			}
			else if(check_(lx,ly-1) == 0)
			{
				//DO NOTHING;
			}
			else if(check_(lx,ly-1) == -1)
			{
				mm[lx][ly] = mo[lx][ly];
				FF = 1;  
				int aaa = (int)mm[lx][ly-1] - 'a';
				if(lx == tr[aaa][0]&&ly-1 == tr[aaa][1])
		 	  		{
		 	  			mm[tr[aaa][2]][tr[aaa][3]] = 'L';
		 	  			lx = tr[aaa][2];
		 	  			ly = tr[aaa][3];
					   }
					 else
					 {
					 	mm[tr[aaa][0]][tr[aaa][1]] = 'L';
					 	lx = tr[aaa][0];
		 	  			ly = tr[aaa][1];
					   }
			
			}
			break;
		case 'd':
		case 'D':
			if(check_(lx,ly+1) == 1)
			{
				mm[lx][ly] = mo[lx][ly];
				mm[lx][ly+1] = 'L';
				lx = lx;
				ly = ly+1;
			}
			else if(check_(lx,ly+1) == 0)
			{
				//DO NOTHING;
			}
			else if(check_(lx,ly+1) == -1)
			{
				mm[lx][ly] = mo[lx][ly];
				FF = 1;  
				int aaa = (int)mm[lx][ly+1] - 'a';
				if(lx == tr[aaa][0]&&ly+1 == tr[aaa][1])
		 	  		{
		 	  			mm[tr[aaa][2]][tr[aaa][3]] = 'L';
		 	  			lx = tr[aaa][2];
		 	  			ly = tr[aaa][3];
					   }
					 else
					 {
					 	mm[tr[aaa][0]][tr[aaa][1]] = 'L';
					 	lx = tr[aaa][0];
		 	  			ly = tr[aaa][1];
					   }
				
			}
			
			break;
				
	}
	
	see();
	
	
	
	return 0;
}
int main()
{
	STEP = 0;
		xmax = ymax =10;
		for(int i = 0;i < xmax;i++)
		{
			for(int j = 0;j < ymax;j++)
			{
				 mm[i][j] = m[i][j] = mo[i][j];
			}
		}
		mm[0][0] = m[0][0] = 'L';

		
		
		
		for(int i = 0;i < xmax;i++)
		{
			
			for(int j = 0;j < ymax;j++)
			{
				if(m[i][j] == 'L')
				{
					lx = i;
					ly = j;
				}
				if(m[i][j] == 'Q')
				{
					qx = i;
					qy = j;
				}
				if(m[i][j]>='a'&&m[i][j]<='z')
				{
					if(istr[(int)m[i][j]-'a' ]== 0)
					{
						tr[(int)m[i][j]-'a'][0] = i;
						tr[(int)m[i][j]-'a'][1] = j;
						istr[(int)m[i][j]-'a' ] = 1;
					}
					else
					{
						tr[(int)m[i][j]-'a'][2] = i;
						tr[(int)m[i][j]-'a'][3] = j;
					}
				}
				
			}
				
			
		}
	
	
	
		minn = bfs();
		see();
		
		while(!ctrl());
		see();
		for(int i = 0;i < 10;i++)
		printf("!!!!!!!!!!!!!!!!!!!!!!!!\n");
		printf("!!!!!!!!!!过了!!!!!!!!!!\n");
		for(int i = 0;i < 10;i++)
		
		printf("!!!!!!!!!!!!!!!!!!!!!!!!\n");
		
	system("pause");
	return 0;
}







本项目构建于RASA开源架构之上,旨在实现一个具备多模态交互能力的智能对话系统。该系统的核心模块涵盖自然语言理解、语音转文本处理以及动态对话流程控制三个主要方面。 在自然语言理解层面,研究重点集中于增强连续对话中的用户目标判定效能,并运用深度神经网络技术提升关键信息提取的精确度。目标判定旨在解析用户话语背后的真实需求,从而生成恰当的反馈;信息提取则专注于从语音输入中析出具有特定意义的要素,例如个体名称、空间位置或时间节点等具体参数。深度神经网络的应用显著优化了这些功能的实现效果,相比经典算法,其能够解析更为复杂的语言结构,展现出更优的识别精度与更强的适应性。通过分层特征学习机制,这类模型可深入捕捉语言数据中隐含的语义关联。 语音转文本处理模块承担将音频信号转化为结构化文本的关键任务。该技术的持续演进大幅提高了人机语音交互的自然度与流畅性,使语音界面日益成为高效便捷的沟通渠道。 动态对话流程控制系统负责维持交互过程的连贯性与逻辑性,包括话轮转换、上下文关联维护以及基于情境的决策生成。该系统需具备处理各类非常规输入的能力,例如用户使用非规范表达或对系统指引产生歧义的情况。 本系统适用于多种实际应用场景,如客户服务支持、个性化事务协助及智能教学辅导等。通过准确识别用户需求并提供对应信息或操作响应,系统能够创造连贯顺畅的交互体验。借助深度学习的自适应特性,系统还可持续优化语言模式理解能力,逐步完善对新兴表达方式与用户偏好的适应机制。 在技术实施方面,RASA框架为系统开发提供了基础支撑。该框架专为构建对话式人工智能应用而设计,支持多语言环境并拥有活跃的技术社区。利用其内置工具集,开发者可高效实现复杂的对话逻辑设计与部署流程。 配套资料可能包含补充学习文档、实例分析报告或实践指导手册,有助于使用者深入掌握系统原理与应用方法。技术文档则详细说明了系统的安装步骤、参数配置及操作流程,确保用户能够顺利完成系统集成工作。项目主体代码及说明文件均存放于指定目录中,构成完整的解决方案体系。 总体而言,本项目整合了自然语言理解、语音信号处理与深度学习技术,致力于打造能够进行复杂对话管理、精准需求解析与高效信息提取的智能语音交互平台。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值