思想
题目:问123的排列有多少种
将1,2,3放在一个队列上一次向后加数--具体看图示与树形图示
图示
树形图示
代码模板(c/c++)
struct Node{
int x,y;
Node(){}
Node(int_x,int_y):x(_x),y(_y){}
};
bool vis[...][...];
viod bfs(int x,int y){
queue<Node> q;
q.push(Node(x,y));
vis[x][y]=true;
while(!q.empty()){
Node f = q.front();
q.pop();
cnt++;
for(int i=0;i<4;i++){
int tx=f.x+dx[i];
int ty=f.y+dy[i];
if(tx>=0 && tx<n && ty>=0 && ty<m && !vis[tx][ty] && g[tx][ty]=='.'){
q.push(Node(tx,ty));
vis[tx][ty]=ture;
}
}
}
}
广搜蔓延障碍物
代码模板
struct Node{
int x,y;
Node(){}
Node(int_x,int_y):x(_x),y(_y){}
};
bool vis[...][...];
viod bfs(int x,int y){
queue<Node> q;
q.push(Node(x,y,0));
vis[x][y]=true;
while(!q.empty()){
Node f = q.front();
q.pop();
cnt++;
for(int i=0;i<4;i++){
int tx=f.x+dx[i];
int ty=f.y+dy[i];
if(tx>=0 && tx<n && ty>=0 && ty<m && !vis[tx][ty] && g[tx][ty]=='.'){
if(tx==fx &&ty==ty ==fy) return f.step+1;
q.push(Node(tx,ty,f.step +1));
vis[tx][ty]=ture;
}
}
}
}
我所做的不一定完全正确(如广搜蔓延障碍物)
还有一些其他大佬大佬的做法
如