zoukankan      html  css  js  c++  java
  • UVA

    //我觉得该注意的地方,都写在注释里了,这题应该也算水题,不难,数据也没有特殊的格式,比较需要注意的就是,写循环的时候,不要把自己绕进去绕晕了
    #include <bits/stdc++.h>
    using namespace std;
    const int N = 12;
    char maze[N][N];
    int num[N][N];
    
    void shownum(int r, int c)
    {
    	for (int i = 0; i < r; i++)
    	{
    		for (int j = 0; j < c; j++)
    		cout << num[i][j] << " ";
    		cout << endl;
    	}
    }
    
    int main()
    {
    	int r, c;
    	int kase = 0;
    	while (cin >> r)
    	{
    		if (!r) break;
    		cin >> c;
    		int m = 1;
    		
    		memset(num, 0, sizeof(num));
    		for (int i = 0; i < r; i++)
    		for (int j = 0; j < c; j++)
    		cin >> maze[i][j];
    		
    		for (int i = 0; i < r; i++)
    		for (int j = 0; j < c; j++)//找出所有起始格并编号 
    		{
    			if (maze[i][j] == '*')
    			continue;//首先要是白格,才有可能是起始格 
    			if (i == 0 || j == 0 || (i > 0 && maze[i - 1][j] == '*') || (j > 0 && maze[i][j - 1] == '*'))
    			{
    				num[i][j] = m++;
    			}
    		}
    	//	shownum(r, c);
    		
    		if (kase) cout << endl;
    		else kase = 1;
    		
    		cout << "puzzle #" << kase++ << ":" << endl << "Across" << endl;
    		
    		for (int i = 0; i < r; i++)
    		{
    		//	int j = 0; //这句一定要注意!当初想当然,把它和for循环的第一句int i = 0 放在了一起,现在想来真是太不仔细了!应该是外层循环每走一次,都要把j重新初始化为0,有些类似冒泡的双重循环,慎之!!!
    			
    			for (int j = 0; j < c; j++)
    			{
    				if (num[i][j] == 0) continue;
    /*				{
    					j++;//此处一定不要忘记j的自增,使得判断对象变为该行的下一列,若漏掉这句,可能会无限循环 
    					continue;//如果为起始格,对应的num数组里的值不会是0
    				}*/
    				
    				
    				cout << setw(3) << num[i][j] << "." << maze[i][j];
    /*				j++;
    				
    				while (j < c && maze[i][j] != '*')
    				{
    					cout << maze[i][j];
    					j++;
    				}*/
    				for (j = j + 1; j < c && maze[i][j] != '*'; j++) cout << maze[i][j];
    				cout << endl;
    			}	
    			
    		}
    		cout << "Down" << endl;
    		
    		for (int i = 0; i < r; i++)
    		for (int j = 0; j < c; j++)
    		{
    			if (!num[i][j]) continue;
    			
    			cout << setw(3) << num[i][j] << "." << maze[i][j];
    			
    		/*	int k = i + 1;
    			while (k < r && maze[k][j] != '*')
    			{
    				cout << maze[k][j];
    				num[k][j] = 0; //起始格原来分为两类,横着的起始格和竖着的,如果是横情况下的起始格,并在竖着时作为普通字母格输出,则它在此后,也不能再作为任何竖列的起始格
    				k++;
    			}*/
    			for (int k = i + 1; k < r && maze[k][j] != '*'; k++)
    			{
    				cout << maze[k][j];
    				num[k][j] = 0;
    			}
    			cout << endl;
    		} 	
    	}
    	return 0;
    }
    
    

  • 相关阅读:
    Django(二)
    VSCode写Django的坑
    AXF—个Django项目
    Linux
    安装软件方面的问题及解决方法杂烩
    Python
    环境搭建
    Django(一)
    关于excel表
    (十)selenium实现微博高级搜索信息爬取
  • 原文地址:https://www.cnblogs.com/mofushaohua/p/7789504.html
Copyright © 2011-2022 走看看