zoj 1589 Professor John(Dijkstra~)
2010-08-14 15:31
295 查看
哈~这道题还算顺利~~一次AC~
就是比大小哈,给你一些关系,然后输出X<Y的形式。
我的想法是,将这些关系输入到一个邻接矩阵里,X<Y 的话MAP[X][Y] = -1,大于等于-1, 其他点都为0;
然后找最小的更新点即可,输出的话,输出dis中小于0的点,当然不包括在输入里小于关系的。细节处理比较纠结。
第一次用函数做DIJ哎。。。哈哈~~以后要养成好习惯,嗯嗯。
就是比大小哈,给你一些关系,然后输出X<Y的形式。
我的想法是,将这些关系输入到一个邻接矩阵里,X<Y 的话MAP[X][Y] = -1,大于等于-1, 其他点都为0;
然后找最小的更新点即可,输出的话,输出dis中小于0的点,当然不包括在输入里小于关系的。细节处理比较纠结。
第一次用函数做DIJ哎。。。哈哈~~以后要养成好习惯,嗯嗯。
#include <stdio.h> #include <stdlib.h> #include <memory.h> int map[30][30],flag[30][30],var[30],count =1; void input() { int n,tx,ty; char x,y,rel; scanf("%d",&n); memset(map,0,sizeof(map)); memset(flag,0,sizeof(flag)); memset(var,0,sizeof(var)); getchar(); while(n--) { scanf("%c%c%c",&x,&rel,&y); getchar(); tx = x-'A'+1; ty = y-'A'+1; var[tx] = 1; var[ty] = 1; if(rel == '>') { map[tx][ty] = 1; map[ty][tx] = -1; flag[ty][tx] = 1; //如果输入已经小于了,则不用输出,在这里标记。 } else { map[tx][ty] = -1; map[ty][tx] = 1; flag[tx][ty] = 1; //同上 } } } void dijkstra() { int k,now,j,i,none = 1; int dis[30],hash[30],min; printf("Case %d:/n",count++); for(k=1; k<=26; k++) { if( var[k] ) //因为不确定是否按26个字母的顺序输入的,所以不确定有几个需要更新的点 { memset(dis,0,sizeof(dis)); memset(hash,0,sizeof(hash)); now = k; hash[now] = 1; for(j=1; j<=26; j++) if( var[j] ) { for(i=1; i<=26; i++) if( var[i] && i!= now && map[now][i] < 0 && dis[i] > dis[now] + map[now][i] ) { dis[i] = dis[now] + map[now][i]; } min = 0; for(i=1; i<=26; i++) if( var[i] && dis[i] < min && !hash[i] ) { min = dis[i]; now = i; } hash[now] = 1; } for(i=1; i<=26; i++) if( !flag[k][i] && dis[i]<0 ) { none = 0; printf("%c<%c/n",k+'A'-1,i+'A'-1); } } } if( none ) printf("NONE/n"); } int main(void) { int ncases,i,j,k; scanf("%d",&ncases); while(ncases--) { input(); dijkstra(); } system("pause"); return 0; }
相关文章推荐
- ZOJ 1589 Professor John(传递闭包)
- ZOJ-1589 Professor John
- ZOJ 1589 Professor John (图的传递闭包)
- zoj 1589 Professor John
- ZOJ 1589 Professor John
- ZOJ 3946 Highway Project【dijkstra】【贪心】
- Highway Project 浙江省第十三届省赛K题 ZOJ 3946(dijkstra+邻接表+优先队列)
- ZOJ 1891 Subway (dijkstra)
- Idiomatic Phrases Game zoj 2750 Dijkstra
- ZOJ 2526 FatMouse and JavaBean II (dijkstra + 权值记录)
- ZOJ 2750 Idiomatic Phrases Game(邻接表+dijkstra)
- ZOJ 2504 Help John! 【最短路】 【Dijkstra】
- ZOJ Dijkstra
- zoj 1589 Professor John 尚有点小疑问
- ZOJ 1298 Dijkstra
- ZOJ 2750 Idiomatic Phrases Game 最短路(dijkstra)
- ZOJ 1456 Minimum Transport Cost (dijkstra+dfs)
- ZOJ 1952( Dijkstra )要求卡车的最大载货量,即是求dist[]的最小值这里关键是把字符串转化为数字存储在邻接矩阵cost[][]中.开始看了党姐的代码不懂,又看了一遍,大悟!
- ZOJ1082 POJ1125 Stockbroker Grapevine,Dijkstra 算法
- ZOJ-2008-Invitation Cards(dijkstra)