BFS 최 단 로 를 구하 세 요.
입력 6, 5, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.
출력
코드
#include
#include
#include
#include
#include
using namespace std;
const int maxn=100+5;
int G[maxn][maxn]; // d=id
int path[maxn]; // ,
int n,m; //n m
int k=1;//
int end_num;
int vx[5] = {-1,1,0,0}; //vx vy 4
int vy[5] = {0,0,-1,1};
bool vis[maxn][maxn]; //
struct node
{
int x;
int y;
int id;
int parent=0;
node(int a,int b,int c)
{
x=a;
y=b;
id=c;
}
};
int main()
{
//freopen("in.txt","r",stdin);
memset(G,0,sizeof(G));
memset(vis,0,sizeof(vis));
memset(path,0,sizeof(path));
cin>>n>>m;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
{
cin>>G[i][j];
}
queue<node> q;
node v=node(1,1,1);
q.push(v);
vis[1][1]=1;
while(!q.empty())
{
node u=q.front();
q.pop();
path[u.id]=u.parent;//
for(int i=0; i<4; i++)
{
int tx=u.x+vx[i];
int ty=u.y+vy[i];
if(G[tx][ty]&&!vis[tx][ty])//
{
vis[tx][ty]=1;
//cout<
node v=node(tx,ty,++k);
end_num=k;
v.parent=u.id;
q.push(v);
}
}
}
vector<int> ans;
//cout<
while(end_num)//
{
ans.push_back(end_num);
end_num=path[end_num];
}
int s=0;
while(!ans.empty())
{
s++;
cout<<*(ans.end()-1)<<' ';//ans 0
ans.pop_back();
}
cout<<endl<<s-1;
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
제1 6 장 파일 에서 텍스트 검색 도구: grep 명령 과 egrep 명령제1 6 장 파일 에서 텍스트 검색 도구: grep 명령 과 egrep 명령 옵션 grep 명령 파일 에서 단 어 를 검색 하면 명령 은 "match pattern"을 포함 하 는 텍스트 줄 을 되 돌려 줍 니 다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.