'commit'
This commit is contained in:
87
C++课程/待整理知识/BFS算法/10X10走迷宫.cpp
Normal file
87
C++课程/待整理知识/BFS算法/10X10走迷宫.cpp
Normal file
@@ -0,0 +1,87 @@
|
||||
//BFS<46>㷨<EFBFBD><E3B7A8><EFBFBD><EFBFBD>
|
||||
//https://blog.csdn.net/qq_42757965/article/details/82019460
|
||||
//<2F><><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
#include<stdio.h>
|
||||
#include<string.h>
|
||||
#include<queue>
|
||||
using namespace std;
|
||||
const int maxn=205;
|
||||
char ch[maxn][maxn];
|
||||
int dis[maxn][maxn];//<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˱<EFBFBD><CBB1><EFBFBD>Ϊ1,û<><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA><30>
|
||||
int d[4][2]={1,0,-1,0,0,1,0,-1};//<2F><><EFBFBD>ߵ<EFBFBD><DFB5>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int n,m;
|
||||
int edx,edy,enx,eny;
|
||||
struct stu
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int step;
|
||||
}A,B;
|
||||
void bfs(int x,int y)
|
||||
{
|
||||
queue<stu> que;
|
||||
A.x=x;
|
||||
A.y=y;
|
||||
A.step=0;
|
||||
dis[x][y]=1;
|
||||
que.push(A);
|
||||
int cnt=-1;
|
||||
while(!que.empty())
|
||||
{
|
||||
|
||||
A=que.front();//<2F>Ѷ<EFBFBD><D1B6>еĶ<D0B5><C4B6><EFBFBD>Ԫ<EFBFBD><D4AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
que.pop();
|
||||
if(A.x==enx&&A.y==eny)//<2F><><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
|
||||
{
|
||||
cnt=A.step;
|
||||
break;
|
||||
}
|
||||
for(int i=0;i<4;i++)//һ<><D2BB><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
B.x=A.x+d[i][0];
|
||||
B.y=A.y+d[i][1];
|
||||
if(B.x>=0&&B.x<n&&B.y>=0&&B.y<m&&dis[B.x][B.y]==0&&ch[B.x][B.y]!='#')//<2F>ж<EFBFBD><D0B6><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ܲ<EFBFBD><DCB2><EFBFBD><EFBFBD>ߣ<EFBFBD>
|
||||
{
|
||||
if(ch[B.x][B.y]=='x') B.step=A.step+2;
|
||||
else B.step=A.step+1;
|
||||
dis[B.x][B.y]=1;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
que.push(B);//<2F><><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5>Ž<EFBFBD><C5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>棻
|
||||
}
|
||||
}
|
||||
}
|
||||
if(cnt == -1) puts("Poor ANGEL has to stay in the prison all his life.");
|
||||
else
|
||||
printf("%d\n", cnt);
|
||||
|
||||
}
|
||||
int main()
|
||||
{
|
||||
while(~scanf("%d %d",&n,&m ))
|
||||
{
|
||||
A.step=0;
|
||||
B.step=0;
|
||||
memset(dis,0,sizeof(dis));
|
||||
for(int i=0;i<n;i++)
|
||||
scanf("%s",ch[i]);
|
||||
for(int i=0;i<n;i++)
|
||||
{
|
||||
for(int j=0;j<m;j++)
|
||||
{
|
||||
if(ch[i][j]=='a')
|
||||
{
|
||||
edx=i;
|
||||
edy=j;
|
||||
}
|
||||
if(ch[i][j]=='r')
|
||||
{
|
||||
enx=i;
|
||||
eny=j;
|
||||
}
|
||||
}
|
||||
}
|
||||
bfs(edx,edy);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
5
C++课程/待整理知识/BFS算法/input.txt
Normal file
5
C++课程/待整理知识/BFS算法/input.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
0 1 0 0 0
|
||||
0 1 0 1 0
|
||||
0 0 0 0 0
|
||||
0 1 1 1 0
|
||||
0 0 0 1 0
|
||||
83
C++课程/待整理知识/BFS算法/迷宫BFS.cpp
Normal file
83
C++课程/待整理知识/BFS算法/迷宫BFS.cpp
Normal file
@@ -0,0 +1,83 @@
|
||||
#include<cstdio>
|
||||
#include<iostream>
|
||||
#define N 5
|
||||
using namespace std;
|
||||
|
||||
struct note
|
||||
{
|
||||
int x,y,pre;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>꣬ǰһ<C7B0><D2BB><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>λ<EFBFBD><CEBB>
|
||||
} que[100];
|
||||
|
||||
int maze[N][N];
|
||||
int Nx[4]= {1,-1,0,0}; //x<><78><EFBFBD>仯<EFBFBD><E4BBAF><EFBFBD><EFBFBD>
|
||||
int Ny[4]= {0,0,-1,1}; //y<><79><EFBFBD>仯<EFBFBD><E4BBAF><EFBFBD><EFBFBD>
|
||||
int start=0,end=1;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void print(int s) {
|
||||
if(que[s].pre!=-1) {
|
||||
//<2F>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD><EFBFBD>
|
||||
print(que[s].pre);//<2F><><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>ǰһ<C7B0><D2BB><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݹ<EFBFBD>
|
||||
cout<<"("<<que[s].x<<", "<<que[s].y<<")"<<endl;
|
||||
}
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ż<EFBFBD><C5BB>㷨
|
||||
void bfsMaze(int x,int y) {
|
||||
que[start].pre=-1;
|
||||
que[start].x=x;
|
||||
que[start].y=y;
|
||||
|
||||
//<2F><><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĻ<DDB5>
|
||||
while(start<end) {
|
||||
//̽<><CCBD><EFBFBD>ĸ<EFBFBD>λ<EFBFBD><CEBB>
|
||||
for(int i=0; i<4; i++) {
|
||||
int a=Nx[i]+que[start].x;
|
||||
int b=Ny[i]+que[start].y;
|
||||
if(a<0 || b<0 || a>=N || b>=N || maze[a][b])//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǽ
|
||||
continue;
|
||||
else {
|
||||
maze[a][b]=-1;//<2F><><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ʹ<EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>
|
||||
que[end].pre=start;
|
||||
que[end].x=a;
|
||||
que[end].y=b;
|
||||
end++;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(a==N-1 && b==N-1)
|
||||
print(start);
|
||||
}
|
||||
start++;
|
||||
}
|
||||
|
||||
}
|
||||
int main() {
|
||||
// <09><><EFBFBD><EFBFBD><EFBFBD>Թ<EFBFBD><D4B9><EFBFBD>ͼ
|
||||
// for(i=0;i<N;i++)
|
||||
// for(j=0;j<N;j++)
|
||||
// scanf("%d",&maze[i][j]);
|
||||
|
||||
int i,j;
|
||||
//<2F><><EFBFBD>ı<EFBFBD><C4B1>ļ<EFBFBD><C4BC>ж<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
FILE *fpRead=fopen("input.txt","r"); //<2F><><EFBFBD><EFBFBD>"r"<22>DZ<EFBFBD>ʾ <20><>
|
||||
if(fpRead==NULL) {
|
||||
return 0;
|
||||
}
|
||||
for( i=0; i<5; i++) {
|
||||
for(j=0; j<5; j++) {
|
||||
fscanf(fpRead,"%d",&maze[i][j]);
|
||||
printf("%d ",maze[i][j]);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
||||
cout<<"(0, 0)"<<endl;
|
||||
bfsMaze(0,0);
|
||||
cout<<"("<<N-1<<", "<<N-1<<")"<<endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user