云霄一中noip吧 关注:3贴子:32
  • 5回复贴,共1

【C++】标准程序段及普通数据类型讲解

只看楼主收藏回复

本文所引用程序段:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int n,m,a[1000][1000][3],t[2][2],v[1000][1000];
int dp(int,int,int);
int main()
{
freopen("home.in","r",stdin);
freopen("home.out","w",stdout);
int mi=0,pa=0;
memset(a,0,sizeof(a));
memset(v,0,sizeof(v));
cin>>n>>m;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
cin>>a[i][j][0];
if(a[i][j][0]==2)
{
t[0][0]=i;
t[0][1]=j;
}
if(a[i][j][0]==3)
{
t[1][0]=i;
t[1][1]=j;
}
}
}
dp(t[0][0],t[0][1],2);
dp(t[1][0],t[1][1],3);
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(a[i][j][0]==4&&pa==0&&a[i][j][1]+a[i][j][2]!=0)
{
mi=a[i][j][1]+a[i][j][2];
pa=1;
}
if(a[i][j][0]==4&&a[i][j][1]+a[i][j][2]!=0) mi=min(a[i][j][1]+a[i][j][2],mi);
}
}
cout<<mi;
return 0;
}
int dp(int x,int y,int z)
{
if(a[x][y][0]==4) return 0;
v[x][y]=1;
for(int i=x-1;i<=x+1;i++)
{
if(i<0||i>=m) continue;
for(int j=y-1;j<=y+1;j++)
{
if(j<0||j>=n) continue;
if(i!=x&&j!=y) continue;
if(v[i][j]==1) continue;
if(a[i][j][0]!=1)
{
if(a[i][j][z-1]==0) a[i][j][z-1]=a[x][y][z-1]+1;
else a[i][j][z-1]=min(a[x][y][z-1]+1,a[i][j][z-1]);
dp(i,j,z);
}
}
}
v[x][y]=0;
}


1楼2015-11-23 21:39回复
    数据类型及变量定义
    常用数据类型:
    integer整型变量,范围-32768~32767,不支持小数
    float单精度变量
    double双精度变量
    char字符型变量,不支持字符串
    string字符串变量,自带数组
    变量:
    名称要求:
    1、 只能是字母开头,严格区分大小写
    2、 不可以是数字或字母以外的其余符号
    3、 不可以是系统正在使用的名称,如在linux系统中time是一个系统变量,则不可以使用time作为变量名称
    定义:
    1、 定义一个integer类型的变量a,写作int a;
    2、 定义一个float类型的变量a,写作float a;
    3、 定义一个double类型的变量a,写作double a;
    4、 定义一个char类型的变量a,写作char a;
    5、 定义一个string类型的变量a,写作string a;
    *string在编程环境中不会变色,但仍是可用类型
    *要使用char类型和string类型,需要#include<cstring>
    *除int外皆不可缩写
    *定义里可以直接赋值,如int a=123;
    *定义里一句可以写多个变量,如int a,b,c;
    *直接赋值不可以是未知变量,如以下即为错误:
    int a=1,b=2,c=a+b;
    以下才是正确:
    int a=1,b=2;
    int c=a+b;
    也就是要换行写


    2楼2015-11-23 21:41
    回复
      int main()//主函数,返回int类型
      文件输入输出:
      #include<cstdio>
      freopen(“”,”r”,stdin);//read,输入
      freopen(“”,”w”,stdout);//write,输出
      如要打开一个home.in文件作为输入文件,home.out作为输出文件,则这么写
      freopen(“home.in”,”r”,stdin);
      freopen(“home.out”,”w”,stdout);


      6楼2015-11-23 21:48
      回复
        int mi=0,pa=0;//在主函数里定义两个int类型变量mi,pa且都初始化为0
        memset(a,0,sizeof(a));//将a数组中所有成员全部初始化为0
        memset(v,0,sizeof(v));//同理
        cin>>n>>m;//输入两个变量n,m
        for(int i=0;i<m;i++)
        {
        for(int j=0;j<n;j++)
        {
        cin>>a[i][j][0];//输入数组a的成员
        if(a[i][j][0]==2)//属于题目特化,暂不讨论
        {
        t[0][0]=i;
        t[0][1]=j;
        }
        if(a[i][j][0]==3)//同上
        {
        t[1][0]=i;
        t[1][1]=j;
        }
        }
        }


        7楼2015-11-23 21:52
        回复
          dp(t[0][0],t[0][1],2);//将t数组的第0行第0列的数据代入dp函数并执行
          dp(t[1][0],t[1][1],3);//同理
          for(int i=0;i<m;i++)
          {
          for(int j=0;j<n;j++)
          {
          if(a[i][j][0]==4&&pa==0&&a[i][j][1]+a[i][j][2]!=0)//若同时满足这三个条件
          {
          mi=a[i][j][1]+a[i][j][2];
          pa=1;
          }
          if(a[i][j][0]==4&&a[i][j][1]+a[i][j][2]!=0) mi=min(a[i][j][1]+a[i][j][2],mi);//保留mi的非0较小值
          }
          }
          cout<<mi;//输出mi
          return 0;//正常结束程序


          8楼2015-11-23 21:56
          回复