emm......
不知道怎么开场。
今天的课有点没看懂......好吧,是很多没听懂。
笔记,就别提了,也就凑合着......
广搜:
1.s塞入队列。vis[s]=true
2.遍历队列。是否为空,空即结束,否则队首出队框架
3.emmmm......没来得及记,而且实在是太多了,太杂
框架:
有点乱:
int adj[N][N]={},s,t;
int q[N]={},vis[N]={},head=1,tail=0;
.......
dis[s]=0;q[++tail]=s;vis[s]=ture;
while(head<=tail)
{
int x=q[head++];//取队首
for(int i=1;i<=n;i++)//寻找相邻的节点
if(adj[x][i]&&!vis[i])//相邻且未遍历
{
q[++tail]=i;
vis[i]=ture;
dis[i]=dis[x]+1;//将新状态加入队尾
if(i==t)
cout<<dis[t]<<endl;//ok,输出s到t的最少步数
}
}
例题:
骑士救公主
emmm,其实我并不会
有守卫和墙,走一步要一个单位时间,杀死首位要额外一个单位时间,求所用最少时间。
嗯,假设守卫的位置(x,y)
(x+1,y,1/0)
(x,y,0)----------- (x-1,y,1/0)
(x,y+1,1/0)
(x,y-1,1/0)
啊啊啊啊啊啊!!!!什么鬼!根本搞不懂!乱七八糟的!
接下来,我们来谈谈DFS和BFS的区别(其实也没多少,也就是鄙人的一己之见).......此人情绪转变非常快
DFS的整体过程基于搜索回溯,适于寻找所有解,不适找最优解,在尝试分支时,没完成时是无法回头的
BFS的整体过程基于待扩展节点的队列,到达每个状态都是最优解,食欲寻找最优解,如最优解太深则使用的空间会很大,BFS执行时不能重复查询
搜索优化:剪枝
其实下面的内容和剪枝没什么关系,真的
因数个数公式:分解质因数后(指数+1)*(指数+1)*....*(指数+1)
剪枝方式:百度优先搜索poj1011
从根的分支要尽量少,剪掉的分支越多,更优化
可悲,老师讲题不给代码