1 条题解

  • 0
    @ 2025-2-14 21:09:17

    C :

    #include<stdio.h>
    #include<string.h>
    
    char v[9],g[9][9];
    int n,ans;
    
    void dfs(int k,int cur)
    {
    	int i,j;
    	for(i=cur-1;i>k-2;i--)
    	{
    		for(j=0;j<n;j++)
    			if(g[i][j]=='#'&&v[j]==0)
    				if(i&&k>1)
    				{
    					v[j]=1;
    					dfs(k-1,i);
    					v[j]=0;
    				}
    				else
    					ans++;
    	}
    }
    
    int main()
    {
    	int k,i;
    	while(scanf("%d%d",&n,&k)!=EOF,n!=-1||k!=-1)
    	{
    		memset(v,0,sizeof(v));
    		for(i=0;i<n;i++)
    			scanf("%s",g[i]);
    		ans=0;
    		dfs(k,n);
    		printf("%d\n",ans);
    	}
    	return 0;
    }
    

    C++ :

    #include<stdio.h>
    #include<string.h>
    
    char v[9],g[9][9];
    int n,ans;
    
    void dfs(int k,int cur)
    {
    	int i,j;
    	for(i=cur-1;i>k-2;i--)
    	{
    		for(j=0;j<n;j++)
    			if(g[i][j]=='#'&&v[j]==0)
    				if(i&&k>1)
    				{
    					v[j]=1;
    					dfs(k-1,i);
    					v[j]=0;
    				}
    				else
    					ans++;
    	}
    }
    
    int main()
    {
    	int k,i;
    	while(scanf("%d%d",&n,&k)!=EOF,n!=-1||k!=-1)
    	{
    		memset(v,0,sizeof(v));
    		for(i=0;i<n;i++)
    			scanf("%s",g[i]);
    		ans=0;
    		dfs(k,n);
    		printf("%d\n",ans);
    	}
    	return 0;
    }
    

    Pascal :

    var
        a:array[1..8,1..8]of char;
        c:array[1..8]of boolean;
        i,j,n,m,k,ans,l:longint;
    
    procedure go(t:longint);
    var
        i:longint;
    begin
        if t>n then exit;
        for i:=1 to n do
            if c[i] and (a[t,i]='#') then
            begin
                c[i]:=false;
                inc(m);
                if m=k then begin inc(ans);end;
    
                if m<k then go(t+1);
                dec(m);
                c[i]:=true;
            end;
        if m<k then go(t+1);
    end;
    
    begin
    
        readln(n,k);
      while not((n=-1)and(k=-1)) do
      begin
        fillchar(c,sizeof(c),true);
        for i:=1 to n do
        begin
            for j:=1 to n do
                read(a[i,j]);
            readln;
        end;
        ans:=0;
        m:=0;
        go(1);
        writeln(ans);
        readln(n,k);
      end;
    end.
    
    

    Python :

    def space_input(p=''):
        s=raw_input(p).split()
        for i in range(len(s)):
            s[i]=eval(s[i])
        return tuple(s)
    class Mymap:
        def __init__(self,l,n):
            self.cnum=1
            for i in range(1,n+1):
                self.cnum*=i
            self.num=n
            self.resultnum=0
            self.linenum=l
            self.line=set(range(l))
            self.map=[[' ' for i in range(l)] for i in range(l)]
        def getmap(self):
            for i in range(self.linenum):
                line=raw_input()
                for j in range(self.linenum):
                    self.map[i][j]=line[j]
        def getresult(self,num,x,y):
            if num:
                for i in x:
                    for j in y:
                        if self.map[i][j]=='#':
                            self.getresult(num-1,x-{i},y-{j})
            else:
                self.resultnum+=1
    l,n=space_input()
    while l!=-1 or n!=-1:
        a=Mymap(l,n)
        a.getmap()
        a.getresult(a.num,a.line,a.line)
        print a.resultnum/a.cnum
        l,n=space_input()
    
    • 1

    信息

    ID
    645
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者