poj1094注意事项
来源:互联网 发布:雷欧团灭mac的怪兽 编辑:程序博客网 时间:2024/05/07 12:53
输出的字符串中少打了一个“.”号,就被告知Wrong Answer,切记
代码如下:
#include "stdio.h"#include "string.h"/*DealWithLine函数的返回状态*/#define FAIL -1#define SUCCESS 1#define REPEATED 0#define NOTSURE -2/*栈空间*/#define STACK_SIZE 100#define SYM_MAX_NUM 26int stack[STACK_SIZE];int stackTop;/*题目的输入参数*/int m=-1,n=-1;int froms[SYM_MAX_NUM];//froms[n]n的入度int graph[SYM_MAX_NUM][SYM_MAX_NUM];//有向图int seq[SYM_MAX_NUM*2];//数组设为26*2,为了避免下标越界char line[5];//用于保存一行关系的字符串void push(int e){stackTop++;stack[stackTop]=e;}int pop(){if(stackTop==-1)return -1;elsereturn stack[stackTop--];}int DealWithLine(){int sym1,sym2;int j,k,i;int pNUM=0;//记录入度为0的点个数int checkedPNUM=0;//记录当前已经搜索了的点个数int notSureFlag=0;//如果在搜索过程中发现有1个以上的入度为0的点,则该标志置高int froms_cpy[SYM_MAX_NUM];//各点入度的备份sym1=line[0]-0x41;sym2=line[2]-0x41;if(graph[sym1][sym2]==1)//重复的关系return REPEATED;graph[sym1][sym2]=1;//更新有向图froms[sym2]++;//更新入度memcpy(froms_cpy,froms,n*sizeof(int));for(j=0;j<n;j++)//初始化栈内容,用以深度优先搜索if(froms_cpy[j]==0){pNUM++;push(j);}if(pNUM==0) return FAIL;//入度为0的点如果没有,则意味着有闭环if(pNUM>1) notSureFlag=1;//入度为0点大于1,则意味着有关系不确定while(stackTop>-1){//深度优先搜索至栈为空int p;pNUM=0;p=pop();seq[checkedPNUM]=p;checkedPNUM++;if(froms_cpy[p]==-1) return FAIL;//如果该点已经搜索过,说明已经形成环froms_cpy[p]=-1;//入度为-1,标志该点已经搜索过for(k=0;k<n;k++){if(graph[p][k]==1){froms_cpy[k]--;//被p点指向的点的入度减1if(froms_cpy[k]==0){//如果入度减1之后变成0,则将该点入栈push(k);pNUM++;}}}if(pNUM>1) notSureFlag=1;}if(checkedPNUM<n) return FAIL;if(notSureFlag!=1) return SUCCESS;return NOTSURE;}int main(){//freopen("../POJ1094_Sorting_it_all_out/in.txt", "r", stdin);//freopen("../POJ1094_Sorting_it_all_out/out.txt", "w", stdout);/* 中间按原样写代码,什么都不用修改 */while(!(m==0 && n==0)){scanf("%d %d",&n,&m);stackTop=-1;memset(froms,0,SYM_MAX_NUM*sizeof(int));memset(graph,0,SYM_MAX_NUM*SYM_MAX_NUM*sizeof(int));int i=0;for(i=0;i<m;i++){scanf("%s",line);int r=DealWithLine();if(r==FAIL){printf("Inconsistency found after %d relations.\n",i+1);break;}else if(r==SUCCESS){printf("Sorted sequence determined after %d relations: ",i+1);for(int j=0;j<n;j++){printf("%c",seq[j]+0x41);}printf(".\n");break;}else if(r==REPEATED){//printf("Inconsistency found after %d relations.\n",i+1);//break;continue;}else{if(i==m-1){printf("Sorted sequence cannot be determined.\n");}else{continue;}}}while(i<m-1){scanf("%s",line);i++;}}//fclose(stdin);//fclose(stdout);return 0;}
0 0
- poj1094注意事项
- POJ1094
- poj1094
- poj1094
- poj1094
- poj1094
- poj1094
- poj1094
- poj1094
- poj1094
- poj1094
- poj1094
- poj1094
- POJ1094
- POJ1094解题报告
- Poj1094拓扑排序总结
- 拓扑排序 poj1094
- poj1094 拓扑排序
- Android中使用Handler造成内存泄露的分析和解决
- JasperReport + Servlet Web应用之:HTML显示报表内容
- java的MD5加密、解密
- Linux网络编程之socket:由一个进程发起多个连接
- Leetcode LRU Cache
- poj1094注意事项
- Oracle -- plsql异常处理
- Xcode6中自动布局autolayout和sizeclass的使用
- poj 2976 drop texts(二分搜索)
- fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏=》 解决办法
- 用calloc分配10块大小为4字节的内存空间,打印指针地址,并且打印出内存中的内容
- Linux权限管理-chown
- 磁力搜索引擎-RunBt
- 使用malloc分别分配2KB,6KB的内存空间,打印指针地址