摘要: BFS此题与普通的BFS不同的是它的路径可以重复走,虽然空间代价不大(8*8),但 是如果你不能很好的判断没有出路的情况,那么就会陷入死循环。我是这么想的:我 先定义一个标记数组mark[][],出发点赋值为6。当你走到4时,那点的mark[][]值赋 为6。每次进队列时判断,如果当前点的mark值大于新生成点的mark时,才能进队列, 否则不能,这样就防止了进入死循环的情况。使用mark数组就省略了标记数组vis 不过,有一点,我始终不解,一到达终点就退出,这样保证了时间最短吗?可还是过了,困惑……当然,也有遍历完所有点的#include<iostream>#include< 阅读全文
posted @ 2011-08-01 00:53 枕边梦 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 优先队列+广度搜索第一次优先队列,重载操作符不是我写的……………………代码,参考大牛的……………………原来优先队列+BFS是这样滴#include<iostream>#include<string>#include<algorithm>#include<queue>using namespace std;char s[201][201];int n,m,vis[200][200],ans;int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};bool es;struct node{ int x,y,dis; node 阅读全文
posted @ 2011-07-31 21:40 枕边梦 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 差距啊,知道整体思路,知道如何剪枝了,结果效率还是比别人慢那么多,唉……奇偶性剪枝还有路径剪枝,具体看下大牛的结题报告吧http://acm.hdu.edu.cn/forum/read.php?tid=6158写得好详细,学习了#include <stdio.h>#include <iostream>#include <string.h>#include <stdlib.h>using namespace std;char map[9][9];int n,m,t,di,dj; //(di,dj):门的位置bool escape;int dir[4 阅读全文
posted @ 2011-07-31 14:42 枕边梦 阅读(2690) 评论(0) 推荐(0) 编辑
摘要: 找最长的公共字串,暴搜呀,先将字符串按长度从短到长排序,枚举最短的字符串的子串,判断是否都是别的字符串的子串,求出最大长度即可什么反串之类的,其实在枚举最短字串的时候,多定义一个字符串再一起赋值就OK了,看代码吧#include<stdio.h>#include<string.h>#include<stdlib.h>char s[105][105];int main(){ int t; scanf("%d",&t); while(t--) { int n,m=100000,l; scanf("%d",& 阅读全文
posted @ 2011-07-31 01:05 枕边梦 阅读(457) 评论(0) 推荐(0) 编辑
摘要: 还是素数筛选法,数组得开大点#include<stdio.h>#include<math.h>int a[100001];void init(){ int n=32768+1; for(int i=2;i<=n;i++) { if(a[i]==0) for(int j=i+i;j<=n;j+=i) a[j]=1; }}int main(){ int i,j,n; init(); while(scanf("%d",&n)==1) { int count=0; for(int i=2;i<=n/2;i++) { if(a[i]= 阅读全文
posted @ 2011-07-30 16:45 枕边梦 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 筛选法,嘿嘿,看了大牛的代码的……#include<stdio.h> #include<string.h> int n,num[40000]; int main( ) { int t; scanf( "%d",&t ); num[0] = num[1] = 0; while( t-- ) { scanf( "%d",&n ); memset( num,0,sizeof( num ) ); for( int i = 2; i <= n / 2; ++i ) for( int j = 1; j * i < 阅读全文
posted @ 2011-07-30 15:45 枕边梦 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 真是服了自己了,一个简单的字符串替换搞了半天……………………C++还是不太会#include<iostream>#include<string>using namespace std;int main(){ string str; while(getline(cin,str)) { //getchar(); string::size_type pos = 0; string str1="you"; while ((pos=str.find(str1,pos)) != string::npos)//若查找失败,返回string::npos { str. 阅读全文
posted @ 2011-07-30 15:41 枕边梦 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 积分的题目还是第一次做,直接用到了高数的知识,恩,还有,曲线的方程用顶点式y = a(x-h)^2+l, (h,l) 为顶点注意精度问题#include<stdio.h>#include<math.h>double x,y,x2,y2,x3,y3,area;double l,h,a,k,b;double f(double x){return (a*x*x*x/3)-(a*h+k/2)*x*x+(a*h*h+l-b)*x;}int main(){ int t; scanf("%d",&t); while(t--) { scanf("% 阅读全文
posted @ 2011-07-30 08:35 枕边梦 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 哈,原来大数用整型数组模拟更快,更容易用呀一个位可以保存大数中的四个位甚至更多,而且效率极高,看完这方面的资料,真是后知后觉啊,自己写了一下代码,确实好写很多#include<stdio.h>#include<stdlib.h>#include<string.h>int res[7500][670],len[7500];void init(){ res[1][0]=1;len[1]=1; res[2][0]=1;len[2]=1; res[3][0]=1;len[3]=1; res[4][0]=1;len[4]=1; int k=0,j; for(int i 阅读全文
posted @ 2011-07-30 00:25 枕边梦 阅读(242) 评论(0) 推荐(0) 编辑
摘要: //求多边形的重心算法//说明://求多边形重心并不是简单的把求三角形的重心公式推广就行了//我的算法是在平面上取一点(一般取原点, 这样可以减少很多计算, 而且使思路更清晰^_^)//这样就得到了N个三角形OP[i]P[i+1](其中点的顺序要为逆时针的),//分别求出这N个三角形的重心Ci和面积Ai(注意此处面积是又向面积, 就是用叉乘求面积时保留其正负号)//在求出A = A1+A2+...+AN(同样保留正负号的代数相加)//最终重心C = sigma(Ai+Ci)/A;#include <iostream>#include <cmath>#include &l 阅读全文
posted @ 2011-07-29 15:04 枕边梦 阅读(542) 评论(0) 推荐(0) 编辑