• 继续昨天的博客


      发现递归返回值的问题后,发现只有在每次递归生成一组sample(代表数独的第一行)后,立即根据这个sample生成完整的数独,然后直接写入就行了。

                    int[,] ans = new int[9, 9];
                    int[] shift = { 0, 3, 6, 7, 4, 1, 2, 5, 8 };
                    for (int i = 0; i < 9; i++)
                    {
                        for (int j = 0; j < 9; j++)
                        {
                            ans[i, j] = sample[(j + shift[i]) % 9];
                        }
                    }

    上面的代码就能根据第一行的数生成的完整的数独。

      接下来是写入的问题,这个地方却是耗费我颇多功夫。毕竟刚开始接触C#。在菜鸟的C#的新手教程里,它提供的一种文件输入方式是filestream的输入方式,这种以二进制的输入方式我一时也没有掌握诀窍。一个一个去转换成二进制再写入,感觉不是很优雅。后面在网上找到了C#的streamwriter的写入方式,以字符串的方式写入。其实还是一个个的将int型的数字转换成了一个个字符然后再写入。其实与二进制写入也没有什么区别,但是可能主观上觉得字符串更加亲近一点吧!

      但是一开始的时候文件输入也没有处理的好,运行时直接报错了,提示我生成的“out.txt”已被某一进程占用,不能使用。

      问题代码在这

    public static void Write_txt(int[,] ans)
            {
                StreamWriter sw = new StreamWriter("out.txt", true, Encoding.Default);
                sw.WriteLine("{0}",Count.count);
                for(int i=0;i<9;i++)
                {
                    
                    for (int j = 0; j < 9; j++)
                    {
                        sw.Write(ans[i, j].ToString() + " ");
                    }
                    sw.WriteLine();
                }
                    
            }

      我以全局的方法去写文件,传入的是ans二维数组然后直接写入。问题也出在这,这个方法被多次使用,所以这个文件被打开多次,所以第二次打开的时候就开始报错了。现在觉得问题很明显,当时却死活也不知道为什么会报错很难受。后面看了一下别人是怎么解决这个问题的,然后在函数末尾加上了两句关闭文件的语句成功的解决了这个问题。

    public static void Write_txt(int[,] ans)
            {
                StreamWriter sw = new StreamWriter("out.txt", true, Encoding.Default);
                sw.WriteLine("{0}",Count.count);
                for(int i=0;i<9;i++)
                {
                    
                    for (int j = 0; j < 9; j++)
                    {
                        sw.Write(ans[i, j].ToString() + " ");
                    }
                    sw.WriteLine();
                }
                sw.Flush();
                sw.Close();//添加的两句
                    
            }

      然后程序能够成功运行了,但是问题还是很严重,太慢了,比蜗牛还慢,跑了半小时只跑了40万个点。

  • 相关阅读:
    BZOJ 3033 太鼓达人(DFS+欧拉回路)
    HDU 5121 Just A Mistake
    HDU 5120 Intersection
    HDU 5119 Happy Matt Friends
    HDU 5117 Fluorescent
    BZOJ 1088: [SCOI2005]扫雷Mine
    Codeforces 994 C
    BZOJ 2242: [SDOI2011]计算器
    HDU 4609 3-idiots
    算法笔记--FFT && NTT
  • 原文地址:https://www.cnblogs.com/zh1903/p/8760899.html
Copyright © 2020-2023  润新知