摘要: Floyd算法能求出任意两点最短路径,时间复杂度为O(n^3)遍历每个节点,且遍历每个点作为中间点做松弛.图:1 4 21 2 92 3 13 4 3初始化:不能直接初始化为0,下面的代码有对边权值的比较,若初始化为0,会出现错误.if(i == j)时,初始化为0是因为节点到本身的距离为0,若不初始化为0,则会被改为与它相邻最小边的二倍. 1 for(i=1;i<=4;i++) 2 { 3 for(j=1;j<=4;j++) 4 { 5 if(i == j) 6 { 7 ... 阅读全文
posted @ 2012-08-31 17:24 zx雄 阅读(245) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1045题意:题目给出一个n和一幅N*N的图,图中包含'.','X'两种字符,要求在上面放上碉堡,碉堡能攻击他所在的行和列,但不能攻击墙,求最多能放多少个碉堡.开始每放一个,就把那一位置所在的行列标记,直到遇到墙或边界停止.这种方法很笨,但由于数据量小,也能AC.View Code 1 #include <iostream> 2 using namespace std; 3 const int MAX = 5; 4 char map[MAX][MAX]; 5 int 阅读全文
posted @ 2012-08-30 20:25 zx雄 阅读(2367) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1181题意:给我若干个单词,若单词A的结尾与单词B的开头相同,则表示A能变成B,判断能不能从b开头变成m结尾. 如: big-got-them第一次使用动态数组vectorView Code 1 #include <iostream> 2 #include <vector> 3 #include <queue> 4 using namespace std; 5 const int MAX = 30; 6 7 int main() 8 { 9 vector <int&g 阅读全文
posted @ 2012-08-30 10:52 zx雄 阅读(294) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1242题意:给出一幅图,由'#','.','a','x','r' 组成, '#'表示墙 '.'表示路 'a'表示终点 'r'表示起点 'x'表示守卫 若要经过x你必须先用1时间打倒守卫,再用1事件走过1格 题目中说存在多个'r', 但我只找了一个却AC了这题是赤裸裸的广搜题,直接用广搜做都是WA改了一下方向向量的顺序就AC了.View 阅读全文
posted @ 2012-08-29 09:54 zx雄 阅读(497) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1104题意:输入3个数 n,k,m ,问通过对n对m进行若干 +, -, * , % 4种操作后 ,能不能得到一个数N,使得 N%k == (n+1)%k 若能,则输出进行操作次数 若不能,则输出0 输入有多组数据,输入0 0 0表示所有数据结束.这里的 % 不能直接使用 因为,题目中的%是数论中的取模.%:如果a = b * q + r (q > 0 and 0 <= r < q) 则 a % q = r 这里必须保证r>0, 而直接对一个负数进行%时则会出现负数.一开始思路是,建立 阅读全文
posted @ 2012-08-28 17:04 zx雄 阅读(412) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1728题意:给出一张图,转弯数k,起点(x1,y1),(x2,y2)判断能不能最多只转k个弯时从起点走到终点 输入时注意起点与终点是先y后x的思路:用point[4][2]表示方向向量,每次遍历遍历一行或者一列,遍历时要注意遇到遍历过的点要跳过去,继续遍历他后面的点而不是直接结束. 由于每次遍历一行所以并不需要记录初始方向. 记录转弯次数则在每一取队头时,把转弯数+1.还是不懂得化去看看KIDx大牛的http://972169909-qq-com.iteye.com/blog/1244218View ... 阅读全文
posted @ 2012-08-27 20:39 zx雄 阅读(1214) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1142题意:点1为起点 点2为终点 从点1走到点x点后,要求点x到点2的距离小于点1到点2的距离 统计路径数目. 输入:n为点的数目 m为道路数目 a b c 为 a到b的权值为c 输出:路径数目思路:用dijkstra +DFS() dijkstra:找出所有点到点2的最短路径,但是遍历所有点到2在记录会超时,所以用2为起点求到各点的最短路径. DFS():需要剪枝,否则也会超时 用mark()数组记录之前进行过DFS得点数.View Code 1 #include <iostream> ... 阅读全文
posted @ 2012-08-27 16:03 zx雄 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 用法reverse(指针,长度)string: reverse( str.begin() , str.end() );char[]: reverse( str2 , str2 + len);int[]: reverse( num , num + n );View Code 1 #include<iostream> 2 #include<algorithm> 3 #include<string> 4 using namespace std; 5 int main() 6 { 7 string str = "abcdef"; //测试stri 阅读全文
posted @ 2012-08-26 21:15 zx雄 阅读(330) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2553用暴力的方法 , 二维数组米字型标记注意:标记恢复时会有重复的标记,所以标记时不能用used[x][y] == 1 要用 used[x][y]++即使只有1~10,10种数据但是这题输入的数据也非常多 所以要把数据用数组保存起来.View Code 1 #include <iostream> 2 using namespace std; 3 const int MAX = 10 + 5; 4 int used[MAX][MAX]; 5 int num; 6 int q; 7 void DFS 阅读全文
posted @ 2012-08-26 19:55 zx雄 阅读(523) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1116题意:给出N个字符串,若所以字符串能连成一串则输出Ordering is possible.否则输出The door cannot be opened.非常蛋疼的用了并查集.思路是用并查集找出所有字符串能不能形成一个集合(只有一个几个 + 用欧拉图的特性判断能不能把所有的点连成一线判断欧拉图: 欧拉回路:所有点的入度等于出度. 欧拉通路:有且仅有两个点的入度不等于出度且入度与出度相差1.(注意:判断时相差2的不能忽略,也要进行记录)View Code 1 #include <iostrea... 阅读全文
posted @ 2012-08-26 13:50 zx雄 阅读(260) 评论(0) 推荐(0) 编辑