数据结构课程设计 迷宫问题

文章目录

    • 一、 目的与要求
    • 二、 问题描述和求解方法
    • 三、 解题过程
    • 四、 实现源码
    • 五、 相关案例
      • 案例一
      • 案例二

一、 目的与要求

1、目的:
通过布置具有一定难度的实际程序设计项目,使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法;使学生掌握分析问题,求解问题的方法并提高学生设计编程实现的能力。
2、要求: 基本要求:
1.要求利用C\C++语言来完成系统的设计;
2.突出C语言的函数特征(以多个函数实现每一个子功能)或者C++语言面向对象的编程思想;
3.画出功能模块图;
4.进行简单界面设计,能够实现友好的交互;
5.具有清晰的程序流程图和数据结构的详细定义;
6.熟练掌握C语言或者C++语言的各种操作。

创新要求: 在基本要求达到后,可进行创新设计,如系统用户功能控制,改进算法的实现,实现友好的人机交互等等

二、 问题描述和求解方法

1 、问题描述(功能要求):
可以任意定义一个迷宫,用非递归的方法求出走出迷宫的通路,并把路径输出出来。
要求: 存储结构、基本算法(可以使用程序流程图)、源程序、测试数据和结果、算法的		时间复杂度、另外可以提出算法的改进方法。
1) 迷宫的存储结构要合理;
2) 应该考虑算法的时间和空间复杂度。
3) 当确定迷宫的规模以及形态以后要把至少一条能走出迷宫的路径输出出来;
4)程序应当满足正确性、可读性、健壮性和高效率及低存储量等目标要求,遵循代码规	范,方便调试和阅读。
2 、问题的解决方案:
根据系统功能要求,可以将问题解决分为以下步骤:
( 1 )迷宫可以采用二维数组来存储,迷宫的通路状态可以用不同的字符来表示;
( 2 )根据问题描述,设计算法的实现;
( 3 )建议在解决问题时要采用栈或者队列数据结构;
( 4 )完成算法的各个功能模块;
( 5 )功能调试;
( 6 )完成系统总结报告以及系统使用说明书。

三、 解题过程

1.分析程序的功能要求,划分程序功能模块。
2.画出系统流程图。
3.代码的编写。定义数据结构和各个功能子函数。
4.程序的功能调试。
5.完成系统总结报告以及使用说明书

四、 实现源码

#include<iostream>
#include<stack> 
#include<queue>
#include<cstring>
using namespace std;
const int MAXN = 1005; 
int n,m,b,c,starx,stary,endx,endy,a[MAXN][MAXN],book[MAXN][MAXN],ans,flag1,flagsee;
int minn = 999999,num,flagY=1;struct node{int x,y;int s; //x,y为坐标,s为步数 int fx,fy;//fx,fy代表该点前面的点的坐标 
};
node bfsmin[MAXN];
node minfinal[MAXN];
stack<node> st; 
stack<node> minst;
queue<node> que;
node MAP,head,tail;
node minMAP[MAXN];
node otherMAP[MAXN]; 
int  flag=0,minflag=1;
void outmap(stack<node> st)//输出可行方案数 
{printf("可行方案%d:",++flag);int ans1 = 0;while(!st.empty()){otherMAP[ans1++] = st.top();st.pop(); }//printf("(%d,%d)",starx,stary);cout<<"起始点"; for(int i = ans-1;i>0;i--){printf("->(%d,%d)",otherMAP[i].x,otherMAP[i].y);if((ans-i) != 0 && (ans-i) % 10 == 0)printf("\n");}cout<<"->终止点"; cout<<endl;
}
void outmin(node bfsmin[MAXN],int minflag)
{int find = minflag;int tx = bfsmin[find].fx;int ty = bfsmin[find].fy;int x=0,y=0; while(bfsmin[find].fx != -1 || bfsmin[find].fy!=-1){int y = 0 ;for(int i=1;i<=minflag;i++){if(bfsmin[i].x == tx&& bfsmin[i].y == ty){minfinal[x++] = bfsmin[i];find = i;tx = bfsmin[i].fx;ty = bfsmin[i].fy;if(x%10 == 0){y = 1;break;}}}if(y==1)break;}cout<<"☆最短路径长度为:"<<x<<endl; cout<<"☆最短路径为:"<<endl;for(int i=x-1;i>=0;i--){printf("(%d,%d)->",minfinal[i].x,minfinal[i].y);}printf("(%d,%d)",endx,endy);
}
void outseeing(stack<node> st)//所有可行方案的可视图
{while(!st.empty()){a[st.top().x][st.top().y] = 2;st.pop();}printf("可行方案%d:\n",++flagsee); for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(a[i][j] == 2){if(i == endx && j == endy)cout<<"★"; elsecout<<"□";a[i][j] = 0;} else if(a[i][j] == 0){if(i == starx && j == stary)cout<<"◆";elsecout<<"█";}else if(a[i][j] == 1)cout<<"▓";}cout<<endl;}cout<<endl;
}
void outminseeing(node bfsmin[MAXN],int minflag)//最短路径的可视图
{ int x = 0;int find = minflag;int tx = bfsmin[find].fx;int ty = bfsmin[find].fy;while(bfsmin[find].fx != -1 || bfsmin[find].fy!=-1){int y = 0 ;for(int i=1;i<=minflag;i++){if(bfsmin[i].x == tx&& bfsmin[i].y == ty){minfinal[x++] = bfsmin[i];find = i;tx = bfsmin[i].fx;ty = bfsmin[i].fy;if(x%10 == 0){y = 1;break;}}}if(y==1)break;}cout<<"☆最短路径长度为:"<<x<<endl; ; 	cout<<"☆最短路径为:"<<endl;for(int i = x-1;i>=0;i--)a[minfinal[i].x][minfinal[i].y] = 2;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(a[i][j] == 2){if(i==starx && j==stary)cout<<"★";elsecout<<"□";a[i][j] = 0;}else if(a[i][j] == 0){if(i == endx && j == endy)cout<<"◆";elsecout<<"█";}else if(a[i][j] == 1)cout<<"▓";}cout<<endl;} 
}
void dfs(int midx,int midy,int step)//深度优先搜索 (dfs)
{int nx,ny;if(midx == endx && midy == endy){if(minn > step){minn = step;flagY = 1;//flag1 = copyMAP(st);} if(num == 2) outmap(st);if(num == 4) outseeing(st);return ;        }int next[4][2]={{0,1},{0,-1},{1,0},{-1,0}};for(int i=0;i<4;i++){nx = midx+next[i][0];ny = midy+next[i][1];if(nx>n||nx<1||ny>m||ny<1)continue;if(a[nx][ny]==0&&book[nx][ny]==0){MAP.x = nx; MAP.y = ny;ans++;st.push(MAP);//cout<<ans<<" ";book[nx][ny]=1;dfs(nx,ny,step+1);book[nx][ny]=0;st.pop();ans--;}} return ;
}void bfs()//广度优先搜索 
{int next[4][2]={{0,1},{0,-1},{1,0},{-1,0}};int bfsflag = 0,tx,ty;head.x = tail.x = starx;head.y = tail.y = stary;head.fx = tail.fx = -1;head.fy = tail.fy = -1; head.s = tail.s = 0;que.push(head);bfsmin[minflag++] = que.front();while(!que.empty()){for(int i=0;i<4;i++){tx = que.front().x + next[i][0];ty = que.front().y + next[i][1];if(tx>n||tx<1||ty>m||ty<1)continue;if(a[tx][ty] == 0 && book[tx][ty] == 0){book[tx][ty] = 1;tail.x = tx; tail.y = ty;tail.fx = que.front().x;tail.fy = que.front().y;tail.s = que.front().s + 1;que.push(tail);}if(tx == endx && ty == endy){bfsflag = 1;bfsmin[minflag++] = tail;if(num == 3)outmin(bfsmin,minflag-1);else if(num == 5)outminseeing(bfsmin,minflag-1);break;}}que.pop();bfsmin[minflag++] = que.front();if(bfsflag == 1)break;}
}
int main()
{cout<<"\n";cout<<"\t\t  欢迎使用迷宫程序"<<endl; cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;cout<<"☆☆\t\t\t1.输入迷宫地图\t\t\t☆☆"<<endl;cout<<"☆☆\t\t2.寻找两个点在迷宫的所有可行方案\t☆☆"<<endl;cout<<"☆☆\t\t  3.寻找两点在迷宫中的最短路径\t\t☆☆"<<endl; cout<<"☆☆\t     4.寻找两个点在迷宫的所有可行方案的可视图   ☆☆"<<endl;cout<<"☆☆\t\t5.寻找两点在迷宫中的最短路径的可视图  \t☆☆"<<endl;cout<<"☆☆\t\t\t6.结束操作\t\t\t☆☆"<<endl;cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;cout<<"☆输入对应数字实现相应功能:"<<endl; while(cin>>num){int flagnum = 0;switch(num){case(1):{cout<<"☆输入迷宫的长和宽:"<<endl;cin>>n>>m;cout<<"☆输入迷宫地图:";cout<<"(其中0代表可走;1代表为障碍物,不可走)"<<endl; for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>a[i][j];}}cout<<"☆输入成功,输入其他数字执行替他操作"<<endl; break;}case(2):{memset(book,0,sizeof(book));cout<<"☆输入起点坐标:"<<endl; cin>>starx>>stary;book[starx][stary]=1;cout<<"☆输入终点坐标:"<<endl;cin>>endx>>endy;dfs(starx,stary,0);if(a[starx][stary]==1 || a[endx][endy]==1)flagY=0;if(flagY == 0)cout<<"没有可行路径,或者坐标超出迷宫范围!!"<<endl; cout<<"☆操作成功,输入其他数字执行替他操作"<<endl;break;}case(3):{memset(book,0,sizeof(book));cout<<"☆输入起点坐标:"<<endl; cin>>starx>>stary;book[starx][stary]=1;cout<<"☆输入终点坐标:"<<endl;cin>>endx>>endy;if(a[starx][stary]==1 || a[endx][endy]==1)flagY=0;if(flagY == 0)cout<<"没有可行路径,或者坐标超出迷宫范围!!"<<endl;else if(starx == endx && stary == endy)cout<<"☆最短路径长度为:0"<<endl;else{bfs();cout<<endl;cout<<"☆操作成功,输入其他数字执行替他操作"<<endl;} break;}case(4):{memset(book,0,sizeof(book));cout<<"☆输入起点坐标:"<<endl; cin>>starx>>stary;book[starx][stary]=1;cout<<"☆输入终点坐标:"<<endl;cin>>endx>>endy;cout<<"◆代表起始点\t★代表终止点"<<endl; cout<<"□代表该方案中要走的位置"<<endl;cout<<"█代表迷宫中可走的位置,但该方案中未走的位置"<<endl;cout<<"▓代表迷宫中不可走的位置"<<endl; cout<<endl;dfs(starx,stary,0);if(a[starx][stary]==1 || a[endx][endy]==1)flagY=0;if(flagY == 0)cout<<"没有可行路径,或者坐标超出迷宫范围!!"<<endl; else cout<<"☆操作成功,输入其他数字执行替他操作"<<endl;break;	} case(5):{memset(book,0,sizeof(book));cout<<"☆输入起点坐标:"<<endl; cin>>starx>>stary;book[starx][stary]=1;cout<<"☆输入终点坐标:"<<endl;cin>>endx>>endy;cout<<"◆代表起始点\t★代表终止点"<<endl; cout<<"□代表该方案中要走的位置"<<endl;cout<<"█代表迷宫中可走的位置,但该方案中未走的位置"<<endl;cout<<"▓代表迷宫中不可走的位置"<<endl; cout<<endl;dfs(starx,stary,0);if(a[starx][stary]==1 || a[endx][endy]==1)flagY=0;if(flagY == 0)cout<<"没有可行路径,或者坐标超出迷宫范围!!"<<endl;else if(starx == endx && stary == endy)cout<<"☆最短路径长度为:0"<<endl;else{bfs(); cout<<"☆操作成功,输入其他数字执行替他操作"<<endl;	}break;} case(6):{flagnum = 1;cout<<"\t☆操作结束☆"<<endl; break;}default:{cout<<"☆未找到对应的功能,请正确输入与相关操作对应的数字"<<endl; break;}} if(flagnum == 1)break;}return 0;
}
/*
5 4
1 1 
4 3
0 0 1 0
0 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
*/

五、 相关案例

案例一

#include <iostream>  
#include <string.h>  
#include <stack>  
#include <queue>  
#include <algorithm>  
using namespace std;  int dx[4]={0,-1,1,0};//方向  
int dy[4]={-1,0,0,1};  
bool vis[6][6];  
int total=0;//多少可到达路径  
int sx=1,sy=1;//入口出口坐标  
int ex=4,ey=4;  
int num[10][10];//广搜时记录到达当前点的最少步数  struct P  
{  int x,y;  
}point[40];//用来记录可到达路径  struct PP  
{  int fx,fy;  
}path[10][10];//用来记录最短路径坐标增量,用于回溯输出最短路径  char map[6][6]=//地图  
{  {'#','#','#','#','#','#'},  {'#','.','.','.','#','#'},  {'#','.','#','.','.','#'},  {'#','.','.','.','#','#'},  {'#','#','.','.','.','#'},  {'#','#','#','#','#','#'}  
};  bool ok(int x,int y)//判断当前点是否可走  
{  if(x<0||x>5||y<0||y>5)  return 0;  if(map[x][y]=='#')  return 0;  if(vis[x][y]==1)  return 0;  return 1;  
}  void dfs(int x,int y,int step)//深搜可到达路径,参数step对于记录路径来说很重要  
{  if(x==ex&&y==ey)  {  total++;  cout<<"第"<<total<<"条路径为: ";  for(int i=0;i<step;i++)  cout<<"("<<point[i].x<<","<<point[i].y<<")";  cout<<endl;  return;  }  for(int i=0;i<4;i++)  {  int curx=x+dx[i];  int cury=y+dy[i];  if(ok(curx,cury))  {  vis[curx][cury]=1;  point[step].x=curx;point[step].y=cury;//记录路径  dfs(curx,cury,step+1);  vis[curx][cury]=0;  }  }  
}  void bfs(int x,int y)//广搜求最短路径  
{  num[x][y]=0;  queue<P>q;  P a,b;  a.x=x;  a.y=y;  path[a.x][a.y].fx=0;path[a.x][a.y].fy=0;  q.push(a);  while(!q.empty())  {  b=q.front();  q.pop();  for(int i=0;i<4;i++)  {  a.x=b.x+dx[i];  a.y=b.y+dy[i];  if(ok(a.x,a.y))  {  vis[a.x][a.y]=1;  q.push(a);  path[a.x][a.y].fx=dx[i];  path[a.x][a.y].fy=dy[i];  num[a.x][a.y]=num[b.x][b.y]+1;//记录步数  }  }  }  
}  void print(int x,int y)//输出最短路径  
{  if(x==sx&&y==sy)  {  cout<<"(1,1)";  return;  }  print(x-path[x][y].fx,y-path[x][y].fy);  cout<<"("<<x<<","<<y<<")";  
}  
int main()  
{  memset(vis,0,sizeof(vis));  memset(num,0,sizeof(num));  vis[sx][sy]=1;  point[0].x=sx;point[0].y=sy;  dfs(sx,sy,1);  cout<<"总计有"<<total<<"条可到达路径"<<endl;  memset(vis,0,sizeof(vis));  vis[sx][sy]=1;  bfs(sx,sy);  cout<<"到达各个点的最少步数如下:"<<endl<<endl;  for(int i=0;i<6;i++)  {  for(int j=0;j<6;j++)  cout<<num[i][j]<<" ";  cout<<endl;  }  cout<<endl;  cout<<"最少要走"<<num[ex][ey]<<"步才能走到出口"<<endl<<endl;;  cout<<"其中一条最短路径为:";print(ex,ey);cout<<endl;  return 0;  
}  

案例二

#include<iostream>
using namespace std;void EnQueue(int i,int j,int k); //入队一个节点
void DeQueue(int *i,int *j,int *k); //获取当前节点的序号和对应的迷宫坐标,然后出列
bool GetNextPos(int *i ,int *j,int count); //得到下一个邻接点的位置
void ShortestPath_BFS(int i,int j); //广度优先遍历寻找最短路径
void ShortestPath(); //输出最短路径
void Print(); //输出迷宫形状int Map[10][10] = {{1,1,1,1,1,1,1,1,1,1},{1,0,0,1,0,0,0,1,0,1},{1,0,0,1,0,0,0,1,0,1},{1,0,0,0,0,1,1,0,0,1},{1,0,1,1,1,0,0,0,0,1},{1,0,0,0,1,0,0,0,0,1},{1,0,1,0,0,0,1,0,0,1},{1,0,1,1,1,0,1,1,0,1},{1,1,0,0,0,0,0,0,0,0},{1,1,1,1,1,1,1,1,1,1}
};struct Node {int parent_id; //保存父节点的位置int node_id; //当前节点的序号,以便传递给孩子节点int x,y; //当前结点对应的坐标
} Q[10*10]; //每个节点包含迷宫坐标、队列中的序号、父节点的序号,多个节点形成队列int front = 0,rear = 0; //队列头指针和尾指针int main() {cout<<"程序说明:"<<'\n'<<"1.输出路径为最短路径;"<<'\n'<<"2.默认的出口在最右下角,如有需要可以调整。"<<'\n'<<'\n';cout<<"初始地图如下:"<<endl;Print();int i,j;reinput:cout<<"请输入起点坐标(x,y): "<<endl;cin>>i>>j;if(Map[i][j]) {cout<<"不能从该处出发,请重新输入!"<<endl;goto reinput;}ShortestPath_BFS(i,j);cout<<"最短路径之一如下:"<<endl;ShortestPath();
}void EnQueue(int i,int j,int k) { //入队一个节点Q[rear].x = i;Q[rear].y = j; //保存当前节点对应的坐标位置Q[rear].parent_id = k; //保存父节点的序号 ************-1Q[rear].node_id = rear; //保存当前节点序号rear++;
}void DeQueue(int *i,int *j,int *k) { //获取当前节点的序号和对应的迷宫坐标,然后出列*i = Q[front].x;*j = Q[front].y;*k = Q[front].node_id;front++; //出列一个节点
}bool GetNextPos(int *i ,int *j,int count) { //得到下一个邻接点的位置switch(count) {case 1:(*j)++;return 1; //右case 2:(*i)++;return 1; //下case 3:(*j)--;return 1; //左case 4:(*i)--;return 1; //上default:return 0;}
}void ShortestPath_BFS(int i ,int j) { //广度优先遍历寻找最短路径int count,m,n,k;EnQueue(i,j,-1);Map[i][j] = 1; //起点入队,标记起点已走过while(true) {count = 1;DeQueue(&i,&j,&k);n = i,m = j;
//保存当前位置while(GetNextPos(&i,&j,count)) {count++;if(!Map[i][j]) {EnQueue(i,j,k);Map[i][j] = 1;if(i == 8 && j == 9)return; //到达终点(8,9)是默认终点,可以任意修改}i = n;j = m; //保证遍历当前坐标的所有相邻位置}}}void ShortestPath() {int i,j,k,sum=0;k = rear-1;while(k != -1) {i = Q[k].x;j = Q[k].y;Map[i][j] = 2;k = Q[k].parent_id;}cout<<" 0 1 2 3 4 5 6 7 8 9"<<endl;for(i = 0; i < 10; i++) {cout<<i;for(j = 0; j < 10; j++) {if(Map[i][j]==2) {sum++;cout<<"□";} elsecout<<"■";}cout<<endl;}cout<<"最短路径长度:"<<sum<<endl;
}void Print() {cout<<" 0 1 2 3 4 5 6 7 8 9"<<endl;for(int i = 0; i < 10; i++) {cout<<i;for(int j = 0; j < 10; j++) {if(Map[i][j])cout<<"■";elsecout<<"□";}cout<<endl;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531000.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html+css 小案例(一)

文章目录点击下载index.html <!DOCTYPE html> <html lang"ch"> <head><meta charset"UTF-8"><title>Demo_Test</title><link rel"stylesheet" href"css/Dec.css"> </head> <body…

HTML+CSS+JS 表白代码

文章目录案例一 爱你到天昏地暗案例二 带有音乐的表白代码案例三 带有图片旋转的表白案例源码案例一 爱你到天昏地暗 <html> <style type"text/css"> <!-- .STYLE1 {font-size: medium} --> </style> <center><br><br>…

Linux常用命令与基本操作、填空题、简答题

文章目录基本知识点基本操作叙述什么是shell?重启虚拟机网络分区查看当前进程查看主机名重启关机查看IP地址文件搜索挂载查看网络配置linux系统中Vi的三种模式磁盘分区查看硬盘信息df&#xff0c;fdisk&#xff0c;lsblk区别进程用户用户信息查看用户密码信息修改密码添加用户…

Java中List、Map、Set三个接口,存取元素时,各有什么特点?

特点 List与Set都是单列元素的集合&#xff0c;它们有一个功共同的父接口Collection。 1.Set里面不允许有重复的元素&#xff0c; 存元素&#xff1a;add方法有一个boolean的返回值&#xff0c;当集合中没有某个元素&#xff0c;此时add方法可成功加入该元素时&#xff0c;则…

客户端与服务器(C/S架构与B/S架构)、AJax学习

文章目录HTTP请求与服务器客户端与服务器1.C/S架构与B/S架构2.web资源介绍3.资源访问流程HTTP协议1.什么是协议&#xff1f;2.什么是HTTP协议3.HTTP组成部分4.请求的发送方式什么是Ajax技术Ajax可以做什么&#xff1f;伪造AjaxHTTP请求与服务器 客户端与服务器 1.C/S架构与B/…

Mysql常用命令汇总

文章目录基本命令连接数据库查看数据库使用数据库查看表查看表结构显示表的细节修改用户密码解决MySQL 5.5,出现乱码问题声明字符集DDL创建表查看表中的结构修改表添加表中的列删除表中的列修改表中的列中属性的数据类型修改表名修改表的字符集为gbk修改表中的列名删除表&#…

SSH框架是什么?

文章目录SSH框架StrutsSpringHibernateSSH框架 浏览器-Struts&#xff08;表示层&#xff09;-Spring&#xff08;业务层&#xff09;-Hibernate-数据库 Struts Struts称流行服务器&#xff0c;以前的流行服务器&#xff0c;通俗的来讲就是完成mvc模型中“C”功能&#xff0c…

前端必会技巧

文章目录点击输入框提示信息防止别人盗取视频设置输入边框透明按钮跳转a标签如何具有bootstra按钮样式formData的使用boostrap上传样式jq获取input标签的值jq获取最近一个td标签的值css设置几个div中的图片保持在一条水平线使div居中canvas 网页背景 粒子鼠标跟随磁力登录界面添…

C/C++ 指针的深入理解

文章目录内存结构地址就是指针为什么地址就是指针&#xff1f;指针&#xff1a;地址的外号&变量空间开辟于内存1.所开辟的空间字节数>1字节2.变量的每个字节都一个地址3.变量的第一个字节的地址代表整个变量的地址4.如何使用变量的指针找到整个变量空间&#xff1f;变量…

linux基础必备

文章目录Linux系统中常用目录结构Linux下如何从普通用户切换到root用户Linux系统常用命令Linux系统文件中相关指令Linux查看开机自启动服务Linux常见服务列表Linux关闭某些服务&#xff08;临时关闭&#xff09;Linux关闭服务开机自启动Linux中在屏幕输入一句话Linux查看系统进…

Hadoop搭建集群中输入hdfs namenode -format格式化节点时,提示:hdfs: command not found 解决办法

分析原因&#xff1a; hadoop的安装路径没有加入到当前路径中 解决办法&#xff1a; 方法1&#xff1a; 进入hadoop的安装目录&#xff0c;在执行hadoop命令时在前面加上&#xff1a;./bin ./sbin 方法2: 进入/etc/profile文件中添加hadoop的安装路径 sudo vim /etc/profile添…

Python 微信定向问好

from numpy import * import itchat from threading import Timerdef get_userName():itchat.auto_login(hotReloadTrue)frienditchat.search_friends(name"飞鸟信")print(friend)userName friend[0][UserName]return userNamedef send_msg():userName get_userNam…

Linux高级编程实验(30个)

文章目录1&#xff09;输出Linux下的c也不是太难嘛&#xff01;在linux下编辑&#xff0c;编译&#xff0c;运行2&#xff09;编写一个简单地c语言程序,根据输入的两个整数求平均值并且在终端输出&#xff0c;通过gcc编译器得到它的汇编程序文件。3&#xff09;编写一个c语言程…

jsp中String path = request.getContextPath()的作用

<% String path request.getContextPath(); String basePath request.getScheme()"://"request.getServerName()":"request.getServerPort()path"/"; %>上述语句是用来拼接当前网页的相对路径 request.getContextPath()获取web项目的根路…

登录界面验证码的实现

文章目录Javaweb实现验证码前端后台Springboot添加验证码项目结构依赖控制类前端页面效果图Javaweb实现验证码 前端 添加样式 <meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0, minimum-scale1.…

Javaweb MVC设计模式、Modle发展史、项目分层和三层架构

文章目录MVC设计模式MVC的目的MVC举例jspservletjavabean模式MVC的优点MVC的缺点Modle 发展史项目分层三层架构MVC设计模式 MVC模式&#xff08;Model-View-Controller&#xff09;是软件工程中的一种软件架构模式&#xff0c;把软件系统分为三个基本部分&#xff1a;模型&…

HTML表格和HTML表单

HTML 表格 表格由 <table> 标签来定义每个表格均有若干行&#xff08;由 <tr> 标签定义&#xff09;&#xff0c;每行被分割为若干单元格&#xff08;由 <td> 标签定义&#xff09; 字母 td 指表格数据&#xff08;table data&#xff09;&#xff0c;即数据…

Eclispe创建jsp文件,提示错误:“The import Xxx cannot be resolved“的解决方案

解决方案&#xff1a; a.(可能是jdk、tomcat版本问题) 右键项目->build path&#xff0c;将其中 报错的 libary或lib 删除后重新导入 b.清空各种缓存&#xff1a;右键项目->Clean tomcat... clean &#xff08;Project -clean或者 进tomcat目录 删除里面work的子目录&a…

JSP访问数据库,Session对象和九大内置对象

文章目录JSP访问数据库Session对象JSP九大内置对象JSP访问数据库 JSP就是在HTML中嵌套的java代码&#xff0c;因此java代码可以卸载JSP中&#xff08;<% … %>&#xff09; 导包操作&#xff1a; Java项目&#xff1a;1. Jar复制到工程中2.右键该Jar&#xff1a;build p…

HDFS学习 Java连接hadoop

文章目录建立连接获取hadoop下的文件信息编写hadoop连接工具类建立连接获取hadoop下的文件信息 import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.BlockLoc…