列车厢调度
#include
#include struct dispatch
{ // 定义调度顺序结构体,start->endint start, end;
}dp[30];int main()
{char track_1[30], track_2 [30]; // 1、2号轨道车厢顺序为字符串char stack[30]; // 3号轨道为栈,注意要定义为字符栈int m = 0, n = 0, top = -1, count = 0; // m、n分别标记字符数组下标,top为栈指针,i为计数器int flag1 = 1, flag3 = 1; // 标记gets(track_1);gets(track_2);int len = strlen(track_2); // 保存字符串长度while (n < len){ // 先检查3轨,再检查1轨if (m == len)flag1 = 0;if (stack[top] == track_2[n]) // 配对成功{stack[top--] = '\0'; // 出栈n++; // 配对下一个dp[count].start = 3; // 记录调度顺序dp[count++].end = 2;continue; // 进行下一次配对flag3 = 1;}elseflag3 = 0;for (int i = m; i < len; i++) // 遍历1轨剩下的车厢{if (track_1[m] == track_2[n]) // 配对成功{ // 可由1轨直接进入2轨m++; // 配对下一个n++; // 配对下一个dp[count].start = 1; // 记录调度顺序dp[count++].end = 2;flag1 = 1;break; // 跳出循环进行下一次配对}else // 配对不成功{stack[++top] = track_1[m++]; // 入栈,同时1轨后移一节车厢dp[count].start = 1; // 记录调度顺序dp[count++].end = 3;flag1 = 0;}}if (flag1 == 0 && flag3 == 0)break;}if (n == len)for (int i = 0; i < count; i++)printf("%d->%d\n", dp[i].start, dp[i].end);elseprintf("Are you kidding me?");return 0;
}
自己试着不要看把代码码出来哦,测试样例可以直接复制,加油小伙汁小改改,为了更美好的未来呢~~~
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
