ZOJ-3172

来源:互联网 发布:怎么做微信淘宝客 编辑:程序博客网 时间:2024/05/17 03:50

求图中的最长路径,开始就想到遍历每个点为源点做一次DFS,提交果断TLE。。然后就开始想改进算法。。网上搜了搜发现看不懂,就打开了大神的代码,发现他的算法和我是一样的!!!也是遍历每个点DFS,然后我用他的代码提交竟然AC了。。为嘛我的就TLE???后来发现唯一不同之处是图的存储他是用邻接表,我是用邻接矩阵的,难道差距在这里?修改之后提交就AC了,擦啊,这个也坑我,大小1000的二维邻接矩阵直接就使时间倍增了?好吧,看来学习C++ STL迫在眉睫啊。。我竟然用C坚持了这么久。。也算个教训吧,以后大的图要用邻接表存

#include<stdio.h>#include<string.h>static int n, m, map[1000][1000], visit[1000], total[1000], max;static void dfs(int now, int depth){visit[now] = 1;if (depth > max)max = depth;int i;for (i = 0; i < total[now]; i++)if (!visit[map[now][i]])dfs(map[now][i], depth + 1);}int main(){int a, b;while (scanf("%d %d", &n, &m) != EOF){memset(map, 0, sizeof(map));memset(total, 0, sizeof(total));while (m--){scanf("%d %d", &a, &b);map[a][total[a]++] = b;map[b][total[b]++] = a;}int i;max = -1;for (i = 0; i < n; i++){memset(visit, 0, sizeof(visit));dfs(i, 1);}if (max > 7)printf("%d\n", max);elseputs("Impossible");}return 0;}


0 0
原创粉丝点击