小编Mik*_*ike的帖子

MySQL中的深度优先搜索

我正在尝试编写一个MySQL PROCEDURE,它将边缘e和边缘设置eset为输入并输出一个布尔值,iscyclic以确定附加边缘是否产生循环图.除了创建一个包含类似" visit count" 的列的所有顶点的表格,然后检查在运行边缘集时是否多次访问任何顶点时,还有更简单的方法吗?

mysql algorithm search stored-procedures depth-first-search

12
推荐指数
1
解决办法
1372
查看次数

异常被捕,但程序仍在运行

我正在开发我的第一个Java项目,实现一个名为"HeartRates"的类,该类获取用户的出生日期并返回其最大和目标心率.除了一件事之外,主测试程序中的所有内容都有效,我无法弄清楚如何在捕获到异常后停止打印其余代码.

我不确定捕获异常的代码的整个部分,因为它是从教授给我们的内容中复制和粘贴的.如果任何人可以告诉我如何在发生错误后终止程序,或者打印自定义错误消息并停止程序进一步执行,我将不胜感激.

这是代码:

 import java.util.Scanner;
 import java.util.GregorianCalendar;

 import javax.swing.JOptionPane;

 public class HeartRatesTest {

public static void main(String[] args) {
    HeartRates test= new HeartRates();
    Scanner input = new Scanner( System.in );
    GregorianCalendar gc = new GregorianCalendar();
    gc.setLenient(false);

        JOptionPane.showMessageDialog(null, "Welcome to the Heart Rate Calculator");;
        test.setFirstName(JOptionPane.showInputDialog("Please enter your first name: \n"));
        test.setLastName(JOptionPane.showInputDialog("Please enter your last name: \n"));
        JOptionPane.showMessageDialog(null, "Now enter your date of birth in Month/Day/Year order (hit enter after each): \n");

        try{
            String num1= JOptionPane.showInputDialog("Month: \n");
            int m= Integer.parseInt(num1);
            test.setMonth(m);
                gc.set(GregorianCalendar.MONTH, …
Run Code Online (Sandbox Code Playgroud)

java exception-handling

11
推荐指数
3
解决办法
4万
查看次数

系统调用fork()和execv函数

我正在尝试使用此c代码连续运行两个可执行文件:

#include <stdio.h>
#include <unistd.h>

int main (int argc, char *argv[])
{
    fork();
    execv("./prcs1", &argv[1]); // GIVE ADDRESS OF 2nd element as starting point to skip source.txt
    fork();
    execv("./prcs2", argv);
    printf("EXECV Failed\n");
}
Run Code Online (Sandbox Code Playgroud)

程序在第一次execv()调用后退出,尽管有fork,它永远不会到达第二个execv().我试过在第一个分叉后调用wait(),但我不确定它是什么缺少的.

任何想法为什么控制不会在孩子退出后返回父母?

c unix linux system-calls

6
推荐指数
3
解决办法
5万
查看次数

MySQL递归周期检测程序

我有以下程序,用于检测带有边(单边)和边集(边集)的无向图中的循环.还有两个参数,left_set(用于存储要传递到递归的必要边)和循环(这是一个布尔值,最终确定图是否是循环的).

出于某种原因,检测在第一次递归之后不起作用.以下代码包含解释详细信息的注释:

我在MYSQL中实现了以下功能(以避免混淆):

-concat_set():如果是空集,则返回两个集合的并置,这些集合占错位','

-remove_first():从set中删除第一个成员

-get_left_node()/ get_right_node:返回边的节点,边之间的分隔符为':',因此边缘看起来像'12:15'

CREATE PROCEDURE `is_cyclic`(
IN `singleedge` VARCHAR(15), 
IN `edgeset` VARCHAR(1024), 
IN 'left_set' VARCHAR(512), 
OUT `cyclic` BOOLEAN)

BEGIN
DECLARE se_left VARCHAR(5);
DECLARE es_left VARCHAR(5);
DECLARE se_right VARCHAR(5);
DECLARE es_right VARCHAR(5);
Call get_left_node(singleedge, se_left);
Call get_left_node(SUBSTRING_INDEX(edgeset, ',', 1), es_left);
Call get_right_node(singleedge, se_right);
Call get_right_node(SUBSTRING_INDEX(edgeset, ',', 1), es_right);



--is edgeset emptY?
    IF LENGTH(edgeset)= 0 AND LENGTH(left_set) = 0 THEN
        BEGIN

            SET cyclic= false;

        END;    

--are singeeledge and first edge in edgeset the same?        
    ELSEIF ((se_left = es_left …
Run Code Online (Sandbox Code Playgroud)

mysql recursion stored-procedures graph

5
推荐指数
1
解决办法
547
查看次数

Mergesort交换和比较

我正在研究一个分析项目,我正在观察在Java中实现时不同算法的行为方式.我得到了一些从在线实现Mergesort算法的代码,现在我需要在10,000个随机生成的整数(1到100,000之间)的数组上运行此代码,并记录进行了多少次交换和比较.

我不确定代码中的哪一点增加了计算Swaps和Comparisons的变量.期望值是多少?因为Mergesort的最佳,最差和平均情况都是nlog(n)这是否意味着我应该期望10,000*(10,000的基数2)约为138,000,交换和比较的总和?

这是代码,我猜测交换仅在原始数组被更改时发生,比较我不太确定:

void MergeSort(int low, int high)
   // a[low : high] is a global array to be sorted.
// Small(P) is true if there is only one element to
// sort. In this case the list is already sorted.
{
   if (low < high) { // If there are more than one element
          // Divide P into subproblems.
          // Find where to split the set.
          int mid = (low + high)/2;
          // Solve the subproblems.
          MergeSort(low, mid);
          MergeSort(mid + …
Run Code Online (Sandbox Code Playgroud)

java algorithm mergesort

2
推荐指数
1
解决办法
5328
查看次数

fork()系统调用和while循环

关于循环内fork()行为的问题.当调用fork()时,假设没有调用wait(),父进程应继续执行代码并循环回到顶部,它会提示您输入q以退出.分叉子应该立即打印其ID和中断,因为pid应该等于孩子的ID而不是0.相反,它会进入无限循环.

任何人都可以告诉我我的误解吗?

int main (int argc, char *argv[])
{
    char run[2];
    int pid=0;
    while (run[0]!= 'q')    
    {
         printf("Type q to quit \n");
         fgets (run, 2, stdin);
         pid=fork();
         //wait();
         printf("child ID: %i\n", pid);
         if(pid!=0) { break;}
    }

}
Run Code Online (Sandbox Code Playgroud)

c linux fork system-calls

1
推荐指数
1
解决办法
1009
查看次数