This commit is contained in:
HuangHai
2025-08-30 18:35:01 +08:00
commit 1f397eca87
6258 changed files with 1487241 additions and 0 deletions

View 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;
}

View 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

View 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;
}