Hanoi塔 和 迷宫
今天去给大二的讲课,GJ给大家讲了Hanoi和迷宫问题。GJ是个大牛,这些对他来说太easy啦。虽然我也作为老师去给大二的讲,但是我觉得我水平还是很有限的。也要仔细研究GJ讲的内容。很值得学习啊!
#include <iostream>
using namespace std;
void Hanoi(int n,int a,int b,int c){ //move n-1 from a to c via b
if(n==1) printf("%d->%d\n",a,c);
else{
Hanoi(n-1,a,c,b);
printf("%d->%d\n",a,b);
Hanoi(n-1,b,c,a);
}
}
int main(){
int n;
scanf("%d",&n);
Hanoi(n,1,2,3);
return 0;
}
迷宫(广度遍历):
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
int n,m;
char s[20];
int v[20][20],map[20][20];
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
struct node1{
int x,y,fa;
node1(int x1,int y1,int fa1){
x=x1;y=y1;fa=fa1;
}
node1(){}
}q[400];
void getmap(){
int i,j;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++){
scanf("%s",s);
for(j=0;j<m;j++){
map[i][j+1]=s[j]-'0'; //从字符按串转换为数字
}
}
}
//递归输出路径
void printpath1(int k){
if(k==0) return;
else{
printpath1(q[k].fa);
printf("%d %d\n",q[k].x,q[k].y);
}
}
void bfs(int sx,int sy){
int i,x1,y1,j,k;
memset(v,0,sizeof(v));
v[sx][sy]=1; //走第一步
q[1]=node1(sx,sy,0); //fa=0
i=0;j=1;
while(i<j){
i++;
for(k=0;k<4;k++){
x1=q[i].x+dx[k];
y1=q[i].y+dy[k];
if(1<=x1 && x1<=n && 1<=y1 &&y1<=m && !v[x1][y1] && !map[x1][y1] ){
v[x1][y1]=1;
q[++j]=node1(x1,y1,i); //++j入栈 其父亲节点为i
if(x1==n && y1==m){
printpath1(j);
return;
}
}
}
}
}
int main()
{
getmap();
bfs(1,1);
system("PAUSE");
return 0;
}
我是一名在校大学生,热爱编程,虽然起步晚了些,但我会努力的。呵呵!
数据结构 算法

浙公网安备 33010602011771号