一个很有用的C++bfs代码(建议在c++中打开)

屠桢  •  10个月前


一个“很有用”的C++bfs代码(建议在c++中打开) 非常建议初学者哦!!! IT's very good for new sb; #include <bits/stdc++.h> using namespace std; struct way{

int x,y;

}; way vis[105][105],a[105],dir[4][2]={{-1,0},{1,0},{0,1},{0,-1}}; int n,k,r,ans,f; void bfs(int n1,int n2){

int book[105][105]={0};
queue<way> q;
q.push(a[n1].x,a[n1].y);
book[a[n1].x][a[n1].y]=1;
while(!q.empty()){
	way tmp=q.front();
	q.pop();
	if(tmp.x==a[n2].x&&tmp.y==a[n2].y){
		f=1;
		break;
	}else{
		for(int i=0;i<4;i++){
			int xx=tmp.x+dir[i][0],yy=tmp.y+dir[i][1];
			way pp;
			pp.x=xx,pp.y=yy;
			if(xx>0&&xx<=n&&yy>0&&yy<=n&&book[xx][yy]==0&&vis[tmp.x][tmp.y]!=pp){
				book[xx][yy]=1;
				q.push(xx,yy);
			}
		}
	}
}

} int main(){

cin>>n>>k>>r;
for(int i=1;i<=r;i++){
	int r1,r2,r3,r4;
	cin>>r1>>r2>>r3>>r4;
	way p1,p2;
	p1.x=r1,p1.y=r2;
	p2.x=r3,p2.y=r4;
	vis[r1][r2]=p2;
	vis[r3][r4]=p1;
} 
for(int i=1;i<=k;i++){
	cin>>a[i].x>>a[i].y;
}
for(int i=1;i<k;i++){
	for(int j=i+1;j<=k;j++){
		f=0;
		bfs(i,j);
		if(!f) ans++;
	}
} 
cout<<ans;
return 0;

}


评论:

厉害


chenjun  •  3个月前