zoukankan      html  css  js  c++  java
  • CODE[VS] 1294 全排列

    题目描述 Description

    给出一个n, 请输出n的所有全排列

    输入描述 Input Description

    读入仅一个整数n   (1<=n<=10)

    输出描述 Output Description

    一共n!行,每行n个用空格隔开的数,表示n的一个全排列。并且按全排列的字典序输出。

    样例输入 Sample Input

    3

    样例输出 Sample Output

    1 2 3

    1 3 2

    2 1 3

    2 3 1

    3 1 2

    3 2 1

    数据范围及提示 Data Size & Hint


    这个题只是一个简单的DFS的算法,但是在做到的时候遇到了两个问题,第一CODE[VS]的编译器对定义的全局变量数组是不初始化为0的,这导致RE了好久。第二,关于cout和cin与printf和scanf之间的速度差异问题,一开始使用的代码是这样的:
    /*************************************************************************
        > File Name: 全排列.cpp
        > Author: zhanghaoran
        > Mail: chilumanxi@gmail.com 
        > Created Time: 2015年07月17日 星期五 11时41分21秒
     ************************************************************************/
    
    #include <iostream>
    #include <cstring>
    
    using namespace std;
    
    int n;
    int flag[11];
    int parr[11];
    
    void dfs(int num){
    	if(num == n + 1){
    	 	for(int i = 1; i <= n; i ++){
    			cout << parr[i] << " ";
    		}
    		cout << endl;
    		return ;
    	}
    	for(int i = 1; i <= n; i ++){
    		if(flag[i])
    			continue;
    		parr[num] = i;
    		flag[i] = 1;
    		dfs(num + 1);
    		flag[i] = 0;
    	}
    	return ;
    }
    
    int main(void){
    	memset(flag,0,sizeof(flag));
            memset(parr,0,sizeof(parr));
    	cin >> n;
    	dfs(1);
    	return 0;
    }

    时对于9以上的数据就超时了,弄得我很郁闷。一开始想的该不会是输出效率问题吧,但是实际上确实如此,更换以后就AC了这道题目,cin和cout为什么这么慢(据说要比scanf和printf慢一倍多)。网上说:
    默认的时候,cin与stdin总是保持同步的,也就是说这两种方法可以混用,而不必担心文件指针混乱,同时cout和stdout也一样,两者混用不会输出顺序错乱。正因为这个兼容性的特性,导致cin有许多额外的开销
    那么我们以后就尽量不用cin和cout作为输入输出吧。。
  • 相关阅读:
    算法竞赛入门经典习题2-3 韩信点兵
    ios入门之c语言篇——基本函数——5——素数判断
    ios入门之c语言篇——基本函数——4——数值交换函数
    144. Binary Tree Preorder Traversal
    143. Reorder List
    142. Linked List Cycle II
    139. Word Break
    138. Copy List with Random Pointer
    137. Single Number II
    135. Candy
  • 原文地址:https://www.cnblogs.com/chilumanxi/p/5136114.html
Copyright © 2011-2022 走看看