我把磁道访问序号读入到一个数组中,然后通过第一次的For循环找出与当前磁道最近的磁道序号并输出了,但后面的循环该如何设置,因为第二次是从上一个序号算下一个最短路径
        private void butTime_Click(object sender, EventArgs e)
        {
            string str1 = this.InputNumber.Text;                  //输入的磁道访问序列
            string[] number1 = str1.Split(new char[] { ' ' });
            int[] number2 = new int[number1.Length];            //将string类型转化为int类型
            for (int i = 0; i < number1.Length; i++)
            {
                number2[i] = Convert.ToInt32(number1[i]);
            }            //当前磁头位置
            int position = Convert.ToInt32(this.InputPosition.Text);
            string output2 = "";
            output2 += "当前磁头的位置:" + position.ToString();
            int dis=Math.Abs(position - number2[0]);
            int pos;
            for (int i = 1; i < number2.Length; i++)
            {
                int n = Math.Abs(position - number2[i]);
                if (n < dis)
                {
                    dis = n;
                    pos = i;
                    output2 += "→" + number2[pos].ToString();
                }
            }
            this.Output.Text = output2;
            }以上是我写得一段程序,请高手看下,菜鸟请教了!

解决方案 »

  1.   

    string str1 = this.InputNumber.Text;                  //输入的磁道访问序列
    string[] number1 = str1.Split(new char[] { ' ' });
    int[] number2 = new int[number1.Length];
    bool[] flags = new bool[number1.Length];//将string类型转化为int类型
    for (int i = 0; i < number1.Length; i++)
    {
        number2[i] = Convert.ToInt32(number1[i]);
        flags[i] = false;
    }//当前磁头位置
    int position = Convert.ToInt32(this.InputPosition.Text);
    string output2 = "";
    output2 += "当前磁头的位置:" + position.ToString();
    for (int i = 0; i < number2.Length; i++)
    {
        int dis = int.MaxValue;
        int pos = -1;
        for (int j = 0; j < number2.Length; j++)
        {
            if (flags[j])
                continue;
            int n = Math.Abs(position - number2[j]);
            if (n < dis)
            {
                dis = n;
                pos = j;
            }
        }
        output2 += "→" + number2[pos].ToString();
        flags[pos] = true;
        position = number2[pos];
    }
    this.Output.Text = output2;